Publishing B2C Store in Hybris 5.6

Posted by Unknown on

Synopsis


This blog post summarizes the steps involved in publishing an OOB B2C electronic accelerator (starter store) on hybris 5602 commerce suite, It
further describes the steps to publish a customized version of the store based on the OOB B2C Accelerator code template.

Setup and Build

Unzip the file to your preferred local folder and execute following from command prompt.

cd ~/hybris/bin/platform
. ./setantenv.sh
ant clean all
....

[input]  Press [Enter] to use the default value ([develop], production)
develop
...
...


all:
     [echo] Build finished on 3-October-2015 09:34:54.
     [echo]        

BUILD SUCCESSFUL
Total time: 43 seconds

At the end of this step you have a hybris commerce suit built using development template.

Setting up localextensions.xml


Unlike previous versions, localextensions.xml generated with development template is empty by default, you need to add the extensions that are relevant for your project.
Here is a sample localextensions.xml for publishing OOB B2C electronic store

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <hybrisconfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="resources/schemas/extensions.xsd">  
  3.     <extensions>  
  4.         <!--  
  5.                 All extensions located in ${HYBRIS_BIN_DIR}/platform/ext are automatically loaded.  
  6.                 More information about how to configure available extensions can be found here : https://wiki.hybris.com/x/nZVzC  
  7.         -->  
  8.                    
  9.         <path dir="${HYBRIS_BIN_DIR}" />  
  10.                                  
  11.         <!-- ext-platform -->  
  12.         <extension name="admincockpit" />  
  13.         <extension name="backoffice" />  
  14.         <extension name="cockpit" />  
  15.         <extension name="hmc" />  
  16.         <extension name="mcc" />  
  17.         <extension name="platformhmc" />  
  18.                                            
  19.         <!-- ext-platform-optional -->  
  20.         <extension name="ldap" />  
  21.         <extension name="lucenesearch" />  
  22.         <extension name="virtualjdbc" />  
  23.                                            
  24.         <!-- ext-cockpit -->  
  25.         <extension name="reportcockpit" />  
  26.                                            
  27.         <!-- ext-commerce -->  
  28.         <extension name="btg" />  
  29.         <extension name="btgcockpit" />  
  30.         <extension name="commercesearch" />  
  31.         <extension name="commercesearchbackoffice" />  
  32.         <extension name="commercesearchhmc" />  
  33.         <extension name="commerceservices" />  
  34.         <extension name="basecommerce" />  
  35.         <extension name="payment" />  
  36.         <extension name="promotions" />  
  37.         <extension name="voucher" />  
  38.         <extension name="customerreview" />  
  39.         <extension name="ticketsystem" />  
  40.         <extension name="solrfacetsearch" />  
  41.         <extension name="solrfacetsearchhmc" />  
  42.         <extension name="oci" />  
  43.         <extension name="wishlist" />  
  44.         <extension name="commercefacades" />  
  45.         <extension name="commercewebservicescommons" />  
  46.                                       
  47.         <!-- ext-content -->  
  48.         <extension name="productcockpit" />  
  49.         <extension name="cms2" />  
  50.         <extension name="cms2lib" />  
  51.         <extension name="cmscockpit" />  
  52.         <extension name="bmecat" />  
  53.         <extension name="bmecathmc" />  
  54.         <extension name="importcockpit" />  
  55.         <extension name="classificationsystems" />  
  56.         <extension name="classificationsystemshmc" />  
  57.                                     
  58.         <!-- ext-channel -->  
  59.         <extension name="cscockpit" />  
  60.         <extension name="mobileoptionals" />  
  61.         <extension name="mobileservices" />  
  62.                                    
  63.         <!-- ext-addon -->  
  64.         <extension name="addonsupport" />  
  65.         <extension name="b2ccheckoutaddon" />  
  66.   
  67.         <!-- ext-print -->  
  68.         <extension name="print" />  
  69.         <extension name="printcockpit" />  
  70.         <extension name="printhmc" />  
  71.   
  72.         <!-- ext-template -->  
  73.         <extension name="ycommercewebservices" />  
  74.         <extension name="ycommercewebserviceshmc" />  
  75.                                         
  76.         <!-- ext-accelerator -->  
  77.         <extension name="acceleratorservices" />  
  78.         <extension name="acceleratorfacades" />  
  79.         <extension name="acceleratorcms" />  
  80.         <extension name="acceleratorstorefrontcommons" />  
  81.           
  82.           
  83.         <extension name="yacceleratorinitialdata" />  
  84.     <extension name="yacceleratorcockpits" />  
  85.     <extension name="yacceleratorfulfilmentprocess" />  
  86.     <extension name="yacceleratorcore" />  
  87.     <extension name="yacceleratorfacades" />  
  88.     <extension name="yacceleratorstorefront" />  
  89.     <extension name="electronicsstore" />  
  90.     <extension name="apparelstore" />  
  91.     <extension name="yacceleratortest" />  
  92.      
  93.     <extension dir="${HYBRIS_BIN_DIR}/ext-addon/b2ccheckoutaddon"/>  
  94.     <extension dir="${HYBRIS_BIN_DIR}/ext-addon/addonsupport"/>  
  95.     <extension dir="${HYBRIS_BIN_DIR}/ext-content/liveeditaddon"/>  
  96.           
  97.         <extension dir="${HYBRIS_BIN_DIR}/ext-addon/acceleratorwebservicesaddon"/>  
  98.           
  99.     </extensions>  
  100. </hybrisconfig>  

Perform a Build again
ant build all
./hybrisserver.sh
Got to Hybris Admin console and perform complete initialization


Adding Add On's necessary for OOB B2C electronic store

# Include Add On
ant addoninstall -Daddonnames="liveeditaddon" -DaddonStorefront.yacceleratorstorefront="yacceleratorstorefront"
...

[echo] Adding addon 'liveeditaddon' to extensioninfo.xml for 'yacceleratorstorefront'

BUILD SUCCESSFUL
If you don't add this plugin it will result in following error while accessing the yaccelerator store, org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/desktop/pages/layout/landingLayout2Page.jsp at line 6

Perform a Build again

ant all
./hybrisserver.sh


Store Initialization


Got to Hybris Admin console and perform following steps.
Platform -> update
select only liveeditaddon and click on update.


Setting up custom Store

ant modulegen -Dinput.module=accelerator -Dinput.name=myb2cstore -Dinput.package=org.mystore
...
...

   [echo] Next steps:
     [echo] 
     [echo] 1) Add your extension to your /Users/hvadiv/hybris5602/hybris/config/localextensions.xml
     [echo] 
     [echo] <extension dir="/Users/hvadiv/hybris5602/hybris/bin/custom/myb2cstore/myb2cstorefulfilmentprocess"/>
     [echo] <extension dir="/Users/hvadiv/hybris5602/hybris/bin/custom/myb2cstore/myb2cstorecore"/>
     [echo] <extension dir="/Users/hvadiv/hybris5602/hybris/bin/custom/myb2cstore/myb2cstoreinitialdata"/>
     [echo] <extension dir="/Users/hvadiv/hybris5602/hybris/bin/custom/myb2cstore/myb2cstorefacades"/>
     [echo] <extension dir="/Users/hvadiv/hybris5602/hybris/bin/custom/myb2cstore/myb2cstoretest"/>
     [echo] <extension dir="/Users/hvadiv/hybris5602/hybris/bin/custom/myb2cstore/myb2cstorestorefront"/>
     [echo] <extension dir="/Users/hvadiv/hybris5602/hybris/bin/custom/myb2cstore/myb2cstorecockpits"/>
     [echo]
     [echo] 2) Remove the following extensions from your /Users/hvadiv/hybris5602/hybris/config/localextensions.xml
     [echo] yacceleratorfulfilmentprocess,yacceleratorcore,yacceleratorinitialdata,yacceleratorfacades,yacceleratortest,yacceleratorstorefront,yacceleratorcockpits
     [echo]
     [echo] 3) Make sure the applicationserver is stopped before you build the extension the first time.
     [echo] 
     [echo] 4) Perform 'ant' in your hybris/platform directory.
     [echo]
     [echo] 5) Restart the applicationserver
     [echo] 
     [echo] 

BUILD SUCCESSFUL

Modified localextensions.xml file in my local setup is as follows.

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <hybrisconfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="resources/schemas/extensions.xsd">  
  3.     <extensions>  
  4.         <!--  
  5.                 All extensions located in ${HYBRIS_BIN_DIR}/platform/ext are automatically loaded.  
  6.                 More information about how to configure available extensions can be found here : https://wiki.hybris.com/x/nZVzC  
  7.         -->  
  8.                    
  9.         <path dir="${HYBRIS_BIN_DIR}" />  
  10.                                  
  11.         <!-- ext-platform -->  
  12.         <extension name="admincockpit" />  
  13.         <extension name="backoffice" />  
  14.         <extension name="cockpit" />  
  15.         <extension name="hmc" />  
  16.         <extension name="mcc" />  
  17.         <extension name="platformhmc" />  
  18.                                            
  19.         <!-- ext-platform-optional -->  
  20.         <extension name="ldap" />  
  21.         <extension name="lucenesearch" />  
  22.         <extension name="virtualjdbc" />  
  23.                                            
  24.         <!-- ext-cockpit -->  
  25.         <extension name="reportcockpit" />  
  26.                                            
  27.         <!-- ext-commerce -->  
  28.         <extension name="btg" />  
  29.         <extension name="btgcockpit" />  
  30.         <extension name="commercesearch" />  
  31.         <extension name="commercesearchbackoffice" />  
  32.         <extension name="commercesearchhmc" />  
  33.         <extension name="commerceservices" />  
  34.         <extension name="basecommerce" />  
  35.         <extension name="payment" />  
  36.         <extension name="promotions" />  
  37.         <extension name="voucher" />  
  38.         <extension name="customerreview" />  
  39.         <extension name="ticketsystem" />  
  40.         <extension name="solrfacetsearch" />  
  41.         <extension name="solrfacetsearchhmc" />  
  42.         <extension name="oci" />  
  43.         <extension name="wishlist" />  
  44.         <extension name="commercefacades" />  
  45.         <extension name="commercewebservicescommons" />  
  46.                                       
  47.         <!-- ext-content -->  
  48.         <extension name="productcockpit" />  
  49.         <extension name="cms2" />  
  50.         <extension name="cms2lib" />  
  51.         <extension name="cmscockpit" />  
  52.         <extension name="bmecat" />  
  53.         <extension name="bmecathmc" />  
  54.         <extension name="importcockpit" />  
  55.         <extension name="classificationsystems" />  
  56.         <extension name="classificationsystemshmc" />  
  57.                                     
  58.         <!-- ext-channel -->  
  59.         <extension name="cscockpit" />  
  60.         <extension name="mobileoptionals" />  
  61.         <extension name="mobileservices" />  
  62.                                    
  63.         <!-- ext-addon -->  
  64.         <extension name="addonsupport" />  
  65.         <extension name="b2ccheckoutaddon" />  
  66.   
  67.         <!-- ext-print -->  
  68.         <extension name="print" />  
  69.         <extension name="printcockpit" />  
  70.         <extension name="printhmc" />  
  71.   
  72.         <!-- ext-template -->  
  73.         <extension name="ycommercewebservices" />  
  74.         <extension name="ycommercewebserviceshmc" />  
  75.                                         
  76.         <!-- ext-accelerator -->  
  77.         <extension name="acceleratorservices" />  
  78.         <extension name="acceleratorfacades" />  
  79.         <extension name="acceleratorcms" />  
  80.         <extension name="acceleratorstorefrontcommons" />  
  81.           
  82.      <extension dir="${HYBRIS_BIN_DIR}/custom/myb2cstore/myb2cstorefulfilmentprocess"/>  
  83.      <extension dir="${HYBRIS_BIN_DIR}/custom/myb2cstore/myb2cstorecore"/>  
  84.      <extension dir="${HYBRIS_BIN_DIR}/custom/myb2cstore/myb2cstoreinitialdata"/>  
  85.      <extension dir="${HYBRIS_BIN_DIR}/custom/myb2cstore/myb2cstorefacades"/>  
  86.      <extension dir="${HYBRIS_BIN_DIR}/custom/myb2cstore/myb2cstoretest"/>  
  87.      <extension dir="${HYBRIS_BIN_DIR}/custom/myb2cstore/myb2cstorestorefront"/>  
  88.      <extension dir="${HYBRIS_BIN_DIR}/custom/myb2cstore/myb2cstorecockpits"/>  
  89.         <!--extension name="yacceleratorinitialdata" />  
  90.     <extension name="yacceleratorcockpits" />  
  91.     <extension name="yacceleratorfulfilmentprocess" />  
  92.     <extension name="yacceleratorcore" />  
  93.     <extension name="yacceleratorfacades" />  
  94.     <extension name="yacceleratorstorefront" />  
  95.     <extension name="yacceleratortest" /-->  
  96.   
  97.   
  98.     <extension name="electronicsstore" />  
  99.     <extension name="apparelstore" />  
  100.      
  101.     <extension dir="${HYBRIS_BIN_DIR}/ext-addon/b2ccheckoutaddon"/>  
  102.     <extension dir="${HYBRIS_BIN_DIR}/ext-addon/addonsupport"/>  
  103.     <extension dir="${HYBRIS_BIN_DIR}/ext-content/liveeditaddon"/>  
  104.           
  105.         <extension dir="${HYBRIS_BIN_DIR}/ext-addon/acceleratorwebservicesaddon"/>  
  106.           
  107.     </extensions>  
  108. </hybrisconfig>  

Perform a Build again
ant
./hybrisserver.sh

Store Initialization


Got to Hybris Admin console and perform following steps.
Platform -> update
and start initialization of the new store.

Adding Add On's necessary for OOB B2C electronic store

ant addoninstall -Daddonnames="liveeditaddon" -DaddonStorefront.myb2cstorestorefront="myb2cstorestorefront"
ant all
./hybriserver.sh
Got to Hybris Admin console and perform following steps.
Platform -> update
select only liveeditaddon and click on update.


Temporary Fix
An issue with JSP compilation at runtime while accessing the home page seems to be a defect in 5602 version
Following fix will help resolve this error, watch out for an official fix in the next version
Navigate to generated source code for .\hybris\bin\custom\myb2cstore\myb2cstorestorefront\web\webroot\WEB-INF\common\tld\cmstags.tld
and replace the content with following.
The change is reverting de.hybris.liveeditaddon.cms.tags.LiveeditaddonCMSContentSlotTag back to de.hybris.platform.acceleratorcms.tags2.CMSContentSlotTag.

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3.   
  4. <taglib xmlns="http://java.sun.com/xml/ns/javaee"  
  5.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  6.         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"  
  7.         version="2.1">  
  8.   <tlib-version>1.2</tlib-version>  
  9.   <short-name>cms</short-name>  
  10.   <uri>http://hybris.com/tld/cmstags</uri>  
  11.   
  12.   
  13.   <tag>  
  14.   <description>Iterates over the components in a CMS content slot for a position in the current page</description>  
  15.   <name>pageSlot</name>  
  16.   <tag-class>de.hybris.platform.acceleratorcms.tags2.CMSContentSlotTag</tag-class>  
  17.   <body-content>JSP</body-content>  
  18.   <attribute>  
  19.   <description>the position of the content slot in the CMS page</description>  
  20.   <name>position</name>  
  21.   <required>true</required>  
  22.   <rtexprvalue>true</rtexprvalue>  
  23.   </attribute>  
  24.   <attribute>  
  25.   <description>the var name to access the content element</description>  
  26.   <name>var</name>  
  27.   <required>true</required>  
  28.   <rtexprvalue>false</rtexprvalue>  
  29.   </attribute>  
  30.   <attribute>  
  31.   <description>the limit on the number of components to render in this slot</description>  
  32.   <name>limit</name>  
  33.   <required>false</required>  
  34.   <rtexprvalue>true</rtexprvalue>  
  35.   </attribute>  
  36.   <attribute>  
  37.   <description>the HTML element to generate for this slot</description>  
  38.   <name>element</name>  
  39.   <required>false</required>  
  40.   <rtexprvalue>true</rtexprvalue>  
  41.   </attribute>  
  42.   <!-- Any other attributes specified are written onto the element -->  
  43.   <dynamic-attributes>true</dynamic-attributes>  
  44.   </tag>  
  45.   
  46.   
  47.   <tag>  
  48.   <description>Iterates over the components in a CMS content slot given the UID of the slot</description>  
  49.   <name>globalSlot</name>  
  50.   <tag-class>de.hybris.platform.acceleratorcms.tags2.CMSContentSlotTag</tag-class>  
  51.   <body-content>JSP</body-content>  
  52.   <attribute>  
  53.   <description>the uid of content slot</description>  
  54.   <name>uid</name>  
  55.   <required>true</required>  
  56.   <rtexprvalue>true</rtexprvalue>  
  57.   </attribute>  
  58.   <attribute>  
  59.   <description>the var name to access the content element</description>  
  60.   <name>var</name>  
  61.   <required>true</required>  
  62.   <rtexprvalue>false</rtexprvalue>  
  63.   </attribute>  
  64.   <attribute>  
  65.   <description>the limit on the number of components to render in this slot</description>  
  66.   <name>limit</name>  
  67.   <required>false</required>  
  68.   <rtexprvalue>true</rtexprvalue>  
  69.   </attribute>  
  70.   <attribute>  
  71.   <description>the HTML element to generate for this slot</description>  
  72.   <name>element</name>  
  73.   <required>false</required>  
  74.   <rtexprvalue>true</rtexprvalue>  
  75.   </attribute>  
  76.   <!-- Any other attributes specified are written onto the element -->  
  77.   <dynamic-attributes>true</dynamic-attributes>  
  78.   </tag>  
  79.   
  80.   
  81.   <!-- The 'slot' tag is deprecated -->  
  82.   <!-- <tag>  
  83.   <description>Iterates over a CMS content slot</description>  
  84.   <name>slot</name>  
  85.   <tag-class>de.hybris.platform.acceleratorcms.tags2.CMSContentSlotTag</tag-class>  
  86.   <body-content>JSP</body-content>  
  87.   <attribute>  
  88.   <description>the content slot</description>  
  89.   <name>contentSlot</name>  
  90.   <required>false</required>  
  91.   <rtexprvalue>true</rtexprvalue>  
  92.   </attribute>  
  93.   <attribute>  
  94.   <description>the uid of content slot</description>  
  95.   <name>uid</name>  
  96.   <required>false</required>  
  97.   <rtexprvalue>true</rtexprvalue>  
  98.   </attribute>  
  99.   <attribute>  
  100.   <description>the position of content slot</description>  
  101.   <name>position</name>  
  102.   <required>false</required>  
  103.   <rtexprvalue>true</rtexprvalue>  
  104.   </attribute>  
  105.   <attribute>  
  106.   <description>the var name to access the content element</description>  
  107.   <name>var</name>  
  108.   <required>true</required>  
  109.   <rtexprvalue>false</rtexprvalue>  
  110.   </attribute>  
  111.   <attribute>  
  112.   <description>the limit on the number of components to render in this slot</description>  
  113.   <name>limit</name>  
  114.   <required>false</required>  
  115.   <rtexprvalue>true</rtexprvalue>  
  116.   </attribute>  
  117.   </tag> -->  
  118.   
  119.   
  120.   <tag>  
  121.   <description>Renders a component by calling it's controller</description>  
  122.   <name>component</name>  
  123.   <tag-class>de.hybris.platform.acceleratorcms.tags2.CMSComponentTag</tag-class>  
  124.   <body-content>JSP</body-content>  
  125.   <attribute>  
  126.   <description>the uid of the component</description>  
  127.   <name>uid</name>  
  128.   <required>false</required>  
  129.   <rtexprvalue>true</rtexprvalue>  
  130.   </attribute>  
  131.   <attribute>  
  132.   <description>the component</description>  
  133.   <name>component</name>  
  134.   <required>false</required>  
  135.   <rtexprvalue>true</rtexprvalue>  
  136.   </attribute>  
  137.   <attribute>  
  138.   <description>the parent component</description>  
  139.   <name>parentComponent</name>  
  140.   <required>false</required>  
  141.   <rtexprvalue>true</rtexprvalue>  
  142.   </attribute>  
  143.   <attribute>  
  144.   <description>Set to true in order to evaluate restrictions on this component, default value false. Note that restrictions are typically evaluated by the slot tag.</description>  
  145.   <name>evaluateRestriction</name>  
  146.   <required>false</required>  
  147.   <rtexprvalue>true</rtexprvalue>  
  148.   </attribute>  
  149.   <attribute>  
  150.   <description>the HTML element to generate for this component</description>  
  151.   <name>element</name>  
  152.   <required>false</required>  
  153.   <rtexprvalue>true</rtexprvalue>  
  154.   </attribute>  
  155.   <!-- Any other attributes specified are written onto the element -->  
  156.   <dynamic-attributes>true</dynamic-attributes>  
  157.   </tag>  
  158.   
  159.   
  160. </taglib>  

Reference


42 comments:

  1. E-commerce Design Company Jaipur, E-commerce Website Design Jaipur. Jovi International is the best E-commerce Development Company Jaipur provides the best services for E-commerce Website Development Jaipur and all over India.

    ReplyDelete
  2. The article is very interesting and truly informative. Thanks for sharing. Keep more sharing.Hotels in Kumbakonam,Kumbakonam Hotels

    ReplyDelete
  3. As a blog reviewer I have to verify all contents both in Blog spots and WordPress Blogs for uniqueness and readers friendly .I found best content in this blog as well as your article is most useful to all regular visitors .I would suggest this blog for further promotion via google. Thank you for posting such a useful article.
    Restaurants in JLT | Indian Restaurants in JLT | Restaurants in Jumeirah
    Restaurants in Jumeirah Lake Towers | Indian Restaurants in Jumeirah

    ReplyDelete
  4. As a blog reviewer I have to verify all contents both in Blog spots and WordPress Blogs for uniqueness and readers friendly .I found best content in this blog as well as your article is most useful to all regular visitors .I would suggest this blog for further promotion via google. Thank you for posting such a useful article.
    Restaurants in JLT | Indian Restaurants in JLT | Restaurants in Jumeirah
    Restaurants in Jumeirah Lake Towers | Indian Restaurants in Jumeirah

    ReplyDelete
  5. This comment has been removed by the author.

    ReplyDelete
  6. Admiring the time and effort you put into your blog and detailed information you offer!..
    digital marketing agency in india

    ReplyDelete
  7. A couple of extra bolts free online movies peppered the no-man’s-land between the mantlets and the wagons, however none received nearer than a few ft.

    ReplyDelete
  8. The object-oriented, class-based build of Java has made it one of most popular programming languages and the demand of professionals with certification in Advance Java training is at an all-time high not just in India but foreign countries too. Honda Life Car Parts In Pakistan
    Honda Vezel Car Parts In Pakistan
    Honda Brv Car Parts In Pakistan
    Suzuki Cultus Car Parts In Pakistan
    Suzuki Swift Car Parts In Pakistan
    Suzuki Alto Car Parts In Pakistan
    Wagon-R Car Parts In Pakistan

    ReplyDelete
  9. Thanks for sharing nice information. Jacky’s Group best electronic store in Dubai.

    ReplyDelete
  10. Thanks for sharing nice information. JACKY’S RETAIL LLC is best online electronic store.

    ReplyDelete
  11. Information from this blog is very useful for me, am very happy to read this blog Kindly visit us @ Luxury Watch Box | Shoe Box Manufacturer |  Candle Packaging Boxes | Wallet Box

    ReplyDelete
  12. Thanks for writing such an important topic.

    You can also visit: www.exertpro.com
    to get more IT and Web Design updates

    https://exertpro.com

    ReplyDelete
  13. Thanks For Posting This usefull Information Techdhyan

    Thank You For This Article

    ReplyDelete
  14. Call services Looking for the best after hour call services, Visit this site. They provide easy access to the messages and calls to their clients.

    ReplyDelete
  15. Thank You, Dịch vụ IT chuyên nghiệp tại Tp. Hồ Chí Minh, Việt Nam

    ReplyDelete
  16. At Gori Studies you will be going to learn about the every course and Subject and able to score good and upgrade your skill.
    We have our Computer Course Center in Rohtak, Haryana and offer many computer Courses at reasonable price with certificate and also offer Job to job seekers. Since 2012 we are providing the education in Rohtak. call - 9253010028

    ReplyDelete
  17. This comment has been removed by the author.

    ReplyDelete

  18. Thank you so much for sharing this post, I appreciate your work. It was a great informative post. Go so many useful and informative links. Loved your writings also.
    How can I automate my business with Exly

    ReplyDelete
  19. Thank you so much for sharing this post, I appreciate your work. It was a great informative post. Go so many useful and informative links. Loved your writings also.
    Best Website Builder

    ReplyDelete
  20. Thank you so much for sharing this post, I have read some of your stuff this past weekend . Personally, I loved your post. I appreciate your work. It was a great informative post. Your articles are useful and informative and links also. I feed glad to read your blog. keep It up.
    If you want to know more information about Top 5 Online Business Ideas You Can Start Today Once you can check it.

    ReplyDelete
  21. Thank you so much for sharing this post, I have read some of your stuff this past weekend . Personally, I loved your post. I appreciate your work. It was a great informative post. Your articles are useful and informative and links also. I feed glad to read your blog. keep It up.
    If you want to know more information about Best Website builders Once you can check it.

    ReplyDelete
  22. Thank you so much for sharing this post, I have read some of your stuff this past weekend . I appreciate your work. It is a great informative post. Your articles are useful and informative and links also. I feed glad to read your blog. keep It up.
    If you want to know more information about How to generate leads for business Once you can check it.

    ReplyDelete
  23. Thank you so much for sharing this post, I have read some of your stuff this past weekend . Personally, I loved your post. I appreciate your work. It was a great informative post. Your articles are useful and informative and links also. I feed glad to read your blog. keep It up.
    If you want to know more information about How to Sell your Fitness Courses Online Once you can check it.

    ReplyDelete
  24. Thank you so much for sharing this post, I have read some of your stuff this past weekend .. It was a great informative post. Your articles are useful and informative and links also. I feed glad to read your blog. keep It up
    If you want to know more information about
    Best Feature-Loaded Alternative to Instamojo in 2021

    ReplyDelete
  25. Thank you so much for sharing this post, I have read some of your stuff this past weekend . Personally, I loved your post. I appreciate your work. It was a great informative post. Your articles are useful and informative and links also. I feed glad to read your blog. keep It up.
    If you want to know more information about
    Top benefits of having an online business Once you can check it.

    ReplyDelete
  26. Thank you so much for sharing this post, I have read some of your stuff this past weekend . Personally, I loved your post. I appreciate your work. It was a great informative post. Your articles are useful and informative and links also. I feed glad to read your blog. keep It up.
    If you want to know more information about
    online consultancy business Once you can check it.

    ReplyDelete
  27. Thank you for every other informative web site. Where else may I am getting that kind of information written in such a perfect way? I’ve a undertaking that I’m just now working on, and I have been on the look out for such information.
    b a part 3 ka result

    ReplyDelete
  28. Start with starting, and know the one gunpoint of managing and analyses of your website data, and host your site with Turkey VPS Server

    ReplyDelete