Wednesday 30 January 2019

Salesforce Lightning Web Components


Hi All,

Today I will talk about Lightning Web Components, which will be generally available in February 2019 and will run in any Salesforce Org.
Introduction

Lightning Web Components is a new programming model for building Lightning components. It holds web standards breakthroughs, can interoperate with the Aura programming model and delivers unique performance. To create and develop Lightning Web Components, you need to set up “Salesforce DX”.and “Visual Studio” code editor, which is the recommended Salesforce development environment. Here are the installation links:


Command Line Interface (CLI) :

https://developer.salesforce.com/tools/sfdxcli
Visual Code Studio :
https://code.visualstudio.com/download

-Now we need to Install below Visual Code Studio Extensions

  1. Salesforce Extension Pack
  2. Lightning Web Components
  3. Salesforce CLI Integration.
-Now we also need to run below commands in “Visual Studio” terminal. Here are the commands:
  1. sfdx plugins:install salesforcedx@pre-release
  2. sfdx plugins:install salesforcedx@latest
Now, we can run “sfdx plugins” command for check the installed plugins.

It should be show result like “salesforcedx 45.0.12 (pre-release)” it.

- Now, we are ready to create new lightning web component. First of all, we need to create new “Developer Edition Pre-Release Org”. Here is the creation link:


- Now, we need to create a new “Salesforce DX” project in our local machine. Here are the steps:


SFDX Project Creation Steps :

  1. In Visual Studio code, press Command + Shift + P on a Mac OR Ctrl + Shift + P on Windows.
  2. Type SFDX: Create Project.
  3. Enter MyLightningWebComponent as the project name, press Enter.
  4. Select a folder to store the project.
  5. Click Create Project.
- Now, we need to follow required steps to connect “Visual Studio” project with our Salesforce org.

  1. In Visual Studio code, press Command + Shift + P on a Mac OR Ctrl + Shift + P on Windows.
  2. SFDX: Authorize a Dev Hub: This step is used for login our pre-release Devhub Org.
  3. SFDX: Create a Default Scratch Org: We need to create new scratch org for pushing our changes from our local machine into scratch org.
  4. SFDX: Create Lightning Web Component: Now we need to create new lightning web component under “lwc” folder.
Now we will create a Lightning Web Component named ‘contactSearch’


Here’s the code:-

contactSearch.html


1:  <template>  
2:    <lightning-card icon-name="custom:custom57">  
3:      <div slot="title">  
4:        <lightning-layout vertical-align="center">  
5:          <lightning-layout-item>  
6:            Contact Search  
7:          </lightning-layout-item>  
8:          <lightning-layout-item padding="around-small">  
9:            <c-nav-to-new-record></c-nav-to-new-record>  
10:          </lightning-layout-item>  
11:        </lightning-layout>  
12:      </div>  
13:      <div class="slds-m-around_medium">  
14:        <lightning-input type="search" onchange={handleKeyChange} class="slds-m-bottom_small" 
15:           label="Search"></lightning-input>  
16:        <template if:true={contacts}>  
17:          <template for:each={contacts} for:item="contact">  
18:            <c-contact-tile key={contact.Id} contact={contact}></c-contact-tile>  
19:          </template>  
20:        </template>  
21:      </div>  
22:    </lightning-card>  
23:  </template>  

contactSearch.css

1:  lightning-input,  
2:  c-contact-tile {  
3:    position: relative;    
4:    border-radius: 4px;  
5:    display: block;  
6:    padding: 2px;  
7:  }  
8:  c-contact-tile {  
9:    margin: 1px 0;  
10:  }  
11:  lightning-input:before,  
12:  c-contact-tile:before {  
13:    color: #dddbda;  
14:    position: absolute;  
15:    top: -9px;  
16:    left: 4px;  
17:    background-color: #ffffff;  
18:    padding: 0 4px;  
19:  }  

contactSearch.js

1:  import { LightningElement, track } from 'lwc';  
2:  import findContacts from '@salesforce/apex/ContactController.findContacts';  
3:  /** The delay used when debouncing event handlers before invoking Apex. */  
4:  const DELAY = 350;  
5:  export default class ContactSearch extends LightningElement {  
6:    @track contacts;  
7:    @track error;  
8:    handleKeyChange(event) {  
9:      // Debouncing this method: Do not actually invoke the Apex call as long as this function is  
10:      // being called within a delay of DELAY. This is to avoid a very large number of Apex method calls.  
11:      window.clearTimeout(this.delayTimeout);  
12:      const searchKey = event.target.value;  
13:      // eslint-disable-next-line @lwc/lwc/no-async-operation  
14:      this.delayTimeout = setTimeout(() => {  
15:        findContacts({ searchKey })  
16:          .then(result => {  
17:            this.contacts = result;  
18:            this.error = undefined;  
19:          })  
20:          .catch(error => {  
21:            this.error = error;  
22:            this.contacts = undefined;  
23:          });  
24:      }, DELAY);  
25:    }  
26:  }  

contactSearch.js-meta.xml:

1:  <?xml version="1.0" encoding="UTF-8"?>  
2:  <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">  
3:    <apiVersion>45.0</apiVersion>  
4:    <isExposed>true</isExposed>  
5:    <targets>  
6:      <target>lightning__AppPage</target>  
7:      <target>lightning__RecordPage</target>  
8:      <target>lightning__HomePage</target>  
9:    </targets>  
10:  </LightningComponentBundle>  

Now we will create a Lightning Web Component named ‘contactTile’

contactTile.html :
1:  <template>  
2:    <lightning-layout vertical-align="center">  
3:      <lightning-layout-item>  
4:        <img src={contact.Picture__c} alt="Profile photo">  
5:      </lightning-layout-item>  
6:      <lightning-layout-item padding="around-small">  
7:        <a onclick={navigateToView}>{contact.Name}</a></p>  
8:        <p>{contact.Title}</p>  
9:        <p>  
10:          <lightning-formatted-phone value={contact.Phone}></lightning-formatted-phone>  
11:        </p>  
12:      </lightning-layout-item>  
13:    </lightning-layout>  
14:  </template>  

contactTile.css:

1:  img {  
2:    width: 60px;  
3:    height: 60px;  
4:    border-radius: 50%;  
5:  }  

contactTile.js

1:  import { LightningElement, api } from 'lwc';  
2:  import { NavigationMixin } from 'lightning/navigation';  
3:  //import getSingleContact from '@salesforce/apex/ContactController.getSingleContact';  
4:  export default class ContactTile extends NavigationMixin(LightningElement) {  
5:    @api contact;  
6:   // @wire(getSingleContact) contact;   
7:    navigateToView() {     
8:     this[NavigationMixin.Navigate]({  
9:      type: "standard__recordPage",  
10:        attributes: {  
11:          objectApiName: "Contact",  
12:          actionName: "view",  
13:          recordId: this.contact.Id,  
14:        },  
15:      });  
16:   }    
17:  }  

contactTile.js-meta.xml:

1:  <?xml version="1.0" encoding="UTF-8"?>  
2:  <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">  
3:    <apiVersion>45.0</apiVersion>  
4:    <isExposed>false</isExposed>  
5:    <targets>  
6:      <target>lightning__AppPage</target>  
7:      <target>lightning__RecordPage</target>  
8:      <target>lightning__HomePage</target>  
9:    </targets>  
10:  </LightningComponentBundle>  

Now we will create a Lightning Web Component named ‘navToNewRecord’

navToNewRecord.html:
1:  <template>  
2:      <lightning-button label="New Contact" variant="brand" class="slds-m-around_medium" 
3:      onclick={navigateToNewContact} ></lightning-button>  
4:  </template>  

navToNewRecord.js:

1:  import { LightningElement } from 'lwc';  
2:  import { NavigationMixin } from 'lightning/navigation';  
3:  export default class NavToNewRecord extends NavigationMixin(LightningElement) {  
4:    navigateToNewContact() {  
5:      this[NavigationMixin.Navigate]({  
6:        type: 'standard__objectPage',  
7:        attributes: {  
8:          objectApiName: 'Contact',  
9:          actionName: 'new',  
10:        },  
11:      });  
12:    }  
13:  }  

navToNewRecord.js-meta.xml

1:  <?xml version="1.0" encoding="UTF-8"?>  
2:  <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata" fqn="navToNewRecord">  
3:    <apiVersion>45.0</apiVersion>  
4:    <isExposed>true</isExposed>  
5:    <targets>  
6:      <target>lightning__AppPage</target>  
7:      <target>lightning__RecordPage</target>  
8:      <target>lightning__HomePage</target>  
9:    </targets>  
10:  </LightningComponentBundle>  

Here’s the GitHub link for further files which are required before pushing to scratch org for this tutorial

https://github.com/jaiaswani10/lightning-web-components
Files which are required:-
Picture__c.field-meta.xml file for creating a custom field
lwc.permissionset-meta.xml file for assigning permission
‘data’ named the folder for loading data

Push to a Scratch Org

Type :SFDX: Push Source to Default Scratch Org by using Ctrl + Shift + P  OrType in terminal
sfdx force:source:push [-u<Username>]

Assign the lwc permission set to the default user:

sfdx force:user:permset:assign -n lwc

Load sample data:

sfdx force:data:tree:import --plan ./data/data-plan.json

Add Component to App in Lightning Experience

  1. Type SFDX: Open Default Org.
  2. Click the app launcher icon App Launcher to open the App Launcher.
  3. Select the Sales app.
  4. Click the gear icon Setup Gear to reveal the Setup menu, then select Edit Page.
  5. Drag the contactSearch Lightning web component from the list of custom components to the top of the Page Canvas.



Deploy it to your Pre-release org:
Log in to your Pre-Release org and create an alias for it.
To deploy we have to also push further files which I’ve mentioned above
Type the following commands in VS Code terminal:
sfdx force:auth:web:login -a MyOrg
Confirm that this org is available:
sfdx force:org:list
Deploy your code to Pre-Release org
sfdx force:source:deploy -p force-app  -u MyOrg
Assign the lwc permission set to the default user:
sfdx force:user:permset:assign -n lwc -u MyOrg
Load sample data:
sfdx force:data:tree:import --plan ./data/data-plan.json -u MyOrg
Run your org  and interact with the app:
sfdx force:org:open -u MyOrg
Thanks,

65 comments:


  1. Thanks for sharing the good information and post more information.Talent flames company is one of the best training and placement company in Hyderabad. Providing training on Technologies like Java,Sql,Oracle,..,etc with 100% Placement Assistance. Now Interviews going on if you want to attend just visit our website and drop your resume. for more information visit us http://talentflames.com/
    training and placement company in Hyderabad

    ReplyDelete
  2. hey there nice article on lightning web components. we have a similar article on Enhanced Performance with Lightning Web Components check it and tell me what you think of it. also read my blog on Evaluate Sales Performance with Territory Management

    ReplyDelete
  3. Can some one help me with this....

    when i press Command + Shift + P and when Type SFDX: Create Project. it is giving me "command not found" error. I installed cli,vs code, plugins and extensions everything as mentioned here, but could not move forward.

    ReplyDelete
  4. I feel very grateful that I read this. It is very helpful and very informative and I really learned a lot from
    data analytics certification

    ReplyDelete
  5. Thanks For sharing a nice post about datascience with python Training Course.It is very helpful and datascience with python useful for us.datascience with python training in bangalore

    ReplyDelete
  6. Great information thank you so much, want to know more about Custom settings in Salesforce

    ReplyDelete
  7. Nice Information for this blog
    Best QA / QC Course in India, Hyderabad. sanjaryacademy is a well-known institute. We have offer professional Engineering Course like Piping Design Course, QA / QC Course,document Controller course,pressure Vessel Design Course, Welding Inspector Course, Quality Management Course, #Safety officer course.
    QA / QC Course
    QA / QC Course in india
    QA / QC Course in hyderabad

    ReplyDelete
  8. Amazing Blog Thank you for the information...

    Dynamic Hip-hop And Western Dance Institute one of the best Dance Institute in Indore do visit to learn Different Dance styles.

    ReplyDelete
  9. Nice Post & I Must Say it is one of the best Blog I have every seen before Otherwise if anyone Want SALESFORCE Training with Placement So You Can Contact here-9311002620

    Some Best SALESFORCE Training Center in Delhi, India

    Salesforce training institute in delhi
    Salesforce training institute in Noida
    Salesforce training institute in Faridabad

    ReplyDelete
  10. The data that you provided in the blog is informative and effective.I am happy to visit and read useful articles here. I hope you continue to do the sharing through the post to the reader. Read more about

    selenium training in chennai

    selenium training in chennai

    selenium online training in chennai

    selenium training in bangalore

    selenium training in hyderabad

    selenium training in coimbatore

    selenium online training

    ReplyDelete
  11. I enjoyed over read your blog post. Your blog have nice information, I got good ideas from this amazing blog. I am always searching like this type blog post. I hope I will see again.
    Data Science Training In Chennai

    Data Science Online Training In Chennai

    Data Science Training In Bangalore

    Data Science Training In Hyderabad

    Data Science Training In Coimbatore

    Data Science Training

    Data Science Online Training

    ReplyDelete
  12. This article is very much helpful and i hope this will be an useful information for the needed one. Keep on updating these kinds of informative things...
    IELTS Coaching in chennai

    German Classes in Chennai

    GRE Coaching Classes in Chennai

    TOEFL Coaching in Chennai

    spoken english classes in chennai | Communication training


    ReplyDelete
  13. Top Quality blog with very helpful information thanks for sharing well done.
    typeerror nonetype object is not subscriptable

    ReplyDelete
  14. Fantastic blog with top quality information found very useful thanks you.
    Data Science Course in Hyderabad

    ReplyDelete

  15. Awesome article with top quality information and I appreciate the writer's choice for choosing this excellent topic found valuable thank you.
    Data Science Training in Hyderabad

    ReplyDelete
  16. From this post I know that your good knowledge of the game with all the pieces has been very helpful. I inform you that this is the first place where I find problems that I look for. You have a clever but attractive way of writing. PMP Training in Hyderabad

    ReplyDelete
  17. Very good message. I stumbled across your blog and wanted to say that I really enjoyed reading your articles. Anyway, I will subscribe to your feed and hope you post again soon.

    Data Science Course

    ReplyDelete
  18. keep up the good work. this is an Ossam post. This is to helpful, i have read here all post. i am impressed. thank you. this is our site please visit to know more information
    data science training in courses

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

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

    ReplyDelete
  21. Thanks for sharing this amazing post. I am a orange county property appraiser at Aipraiser that is a certified residential real estate appraiser online portal that provides nationwide property and appraisal services.

    ReplyDelete
  22. You must be 100% dedicated to training and developing your staff and raising their performance from regular employees into high performing leaders who are energized, alive and connected with your customers. Salesforce training in Hyderabad

    ReplyDelete
  23. Hire Zoho developer freelancer for implementation and outsourcing projects and they can help you in any task related to project management, project quality assurance development, process optimization, system optimization, workforce system optimizations and implementations and post-implementation support. Hire Zoho Developer Freelancer

    ReplyDelete
  24. Very nice post thank you for sharing this post its very knowledgeable and very helpful i hope that you will continue to post these kinds of contents in future apart from that if anyone looking for e accounting institute in delhi so Contact Here-+91-9311002620 Or Visit Website- https://www.htsindia.com/Courses/Tally/e-accounting-training-course

    ReplyDelete
  25. Thank you for sharing this valuable post really appreciable post if anyone look for best. If anyone looking for best Ms Office training institute in Delhi Contact Here-+91-9311002620 Or Visit our website https://www.htsindia.com/Courses/microsoft-courses/ms-office-course

    ReplyDelete
  26. Thanks for sharing this content and if you are looking for best tally institute in delhi so contact here +91-9311002620 visit https://www.htsindia.com/Courses/tally/tally-training-course

    ReplyDelete
  27. CBD isolates. CBD (cannabidiol) is an active ingredient found in th CBD Cannabis plant that does not cause psychoactive "high". Instead, the active ingredient provides soothing energy, such as a stronger Ginkgo Biloba tea

    ReplyDelete
  28. A big thank you for sharing this post its really awesome apart from that if anyone looking for e accounting institute in delhi so Contact Here-+91-9311002620 Or Visit Website- https://www.htsindia.com/Courses/Tally/e-accounting-training-course

    ReplyDelete
  29. We have collected a lot of games poker here. Along with various content and knowledge provided To poker players around the world The world of poker online

    ReplyDelete
  30. it is not the most popular on this list, but fans do love its benefits ดูบอลฟรี . One of these is that no sign up is required, but you can sign up for free to get some convenient options. For instance, it provides intelligent content recommendations and a calendar for you to set up reminders. That way, you never miss your favorite live content. If you do miss it, though, you can always pull it up on Duball24hrs.com recordings.

    ReplyDelete
  31. Great Blog nice information shared here I read all your post very informative one.Tamil Novels
    Tamil Novels Pdf

    ReplyDelete
  32. Baccarat online You can play multiple tables at the same time. Make an increase in profits Members who love to bet baccarat can choose to bet on the table. Baccarat online A variety of tables And many websites Online gambling website ufabet has combined various famous online casinos into one website. Members can choose to play as much as they want.

    ReplyDelete
  33. Thanks for sharing this content its really a great post and very helpful thanks for sharing this knowledgeable content and if anyone looking for best tally institute in delhi so contact here +91-9311002620 visit https://www.htsindia.com/Courses/tally/tally-training-course

    ReplyDelete
  34. I must admit that your post is really interesting. I have spent a lot of my spare time reading your content. Thank you a lot!
    data scientist training and placement in hyderabad

    ReplyDelete
  35. If your best option turns out to be a personal loan, take time to shop for the best rates. With a personal loan, you'll be making fixed monthly payments. As long as you pay on time, you'll also be building your credit history.
    fishyfacts4u.com
    fishyfacts4u.com
    fishyfacts4u.com
    fishyfacts4u.com
    fishyfacts4u.com
    fishyfacts4u.com
    fishyfacts4u.com
    fishyfacts4u.com
    fishyfacts4u.com
    fishyfacts4u.com

    ReplyDelete
  36. As usual, the free option will limit you to a subdomain, but where Carrd really stands out is the paid upgrades, you can go pro for only $19 per year.
    emagazinehub.com
    emagazinehub.com
    emagazinehub.com
    emagazinehub.com
    emagazinehub.com
    emagazinehub.com
    emagazinehub.com
    emagazinehub.com
    emagazinehub.com
    emagazinehub.com

    ReplyDelete
  37. SunTrust Travel Rewards Credit Card: Earn 3% cash back on travel, 2% back on dining and 1% back on all other purchases. You’ll also earn a $250 statement credit after spending $3,000 in the first three months after opening the account.
    inewshunter.com
    inewshunter.com
    inewshunter.com
    inewshunter.com
    inewshunter.com
    inewshunter.com
    inewshunter.com
    inewshunter.com
    inewshunter.com
    inewshunter.com

    ReplyDelete
  38. These income thresholds allow for a broad-based credit, says Francine J. Lipman, a William S. Boyd professor of law at the University of Nevada—Las Vegas, with payments going to families across the income spectrum.

    juicyfactor.com
    juicyfactor.com
    juicyfactor.com
    juicyfactor.com
    juicyfactor.com
    juicyfactor.com
    juicyfactor.com
    juicyfactor.com
    juicyfactor.com
    juicyfactor.com

    ReplyDelete
  39. They also may have both resident and nonresident taxes. Nonresidents pay local income tax only on money earned in that municipality while residents pay taxes on all income, regardless of where it is earned. Residents who work in a different municipality that charges an income tax may receive a credit for those tax payments.

    localnewsbuzz.com
    localnewsbuzz.com
    localnewsbuzz.com
    localnewsbuzz.com
    localnewsbuzz.com
    localnewsbuzz.com
    localnewsbuzz.com
    localnewsbuzz.com
    localnewsbuzz.com
    localnewsbuzz.comA

    ReplyDelete
  40. I finally found great post here.I will get back here. I just added your blog to my bookmark sites. thanks. Quality posts is the crucial to invite the visitors to visit the web page, that's what this web page is providing.
    AWS Training in Hyderabad
    AWS Course in Hyderabad

    ReplyDelete
  41. If you suspect your hard drive is failing, you can manually initiate a scan. The most basic command is chkdsk c:, which will immediately scan the C: drive, without a need to restart the computer. If you add parameters like /f, /r, /x, or /b, such as in chkdsk /f /r /x /b c:, chkdsk will also fix errors, recover data, dismount the drive, or clear the list of bad sectors, respectively. These actions require a reboot, as they can only run with Windows powered down.

    Movie
    Music
    News
    Nutrition
    Politics
    Reviews
    Science
    Software

    ReplyDelete
  42. That's why, if you fall into this category, you'll need someone to keep an eye on your kids wherever they are. bodyguard company
    The person you choose to take care of your children should be trustworthy and honest. We've heard of cases where caretakers liaise with kidnappers to abduct children. You don't want to fall victim to such a racket. UK Close Protection Services are specialists in child protection. When you hire us, we'll provide you with armed and unarmed bodyguards to protect your family against any harm or kidnap.

    ReplyDelete
  43. thanks for sharing information.

    บทความโป๊กเกอร์ สาระดีๆความรู้โป๊กเกอร์ ต้องที่นี่เลย เว็บ www.turnpropoker.com มาอ่านบทความดีๆเกี่ยวกับโป๊กเกอร์ได้ที่นี่เลย

    ReplyDelete
  44. This is really very nice post you shared, i like the post, thanks for sharing..
    data science training in malaysia

    ReplyDelete
  45. slotxo ที่ได้รับความนิยมใหม่ปัจจุบันจากพวกเราทางคณะทำงานกระหยิ่มใจเสนอรวมทั้งต้องการมอบประสบการณ์ใหม่ที่เหมาะสมที่สุด
    slotxo ที่ได้รับความนิยมใหม่ปัจจุบันจากพวกเราทางคณะทำงานกระหยิ่มใจ slotxoth เสนอรวมทั้งต้องการมอบประสบการณ์ใหม่ที่ยอดเยี่ยม แล้วก็บริบูรณ์พร้อมสำหรับการเล่น Slot ออนไลน์ ลงทะเบียนกับพวกเราวันนี้รับโบนัสฟรีฝาก–ถอนก็เร็วด้วยระบบอัตโนมัติเพื่อลูกค้าสมาชิกทุกคนได้รับความสนุก ตื่นเต้นเพลินสร้างความสนุกสนานและก็ให้การบรรเทาแก่ลูกค้าสมาชิกทุกคนตลอด 24 ชั่วโมง

    หรือค่า PG slot ค่ายสล็อตออนไลน์ที่มาแรงมากมายๆในปีนี้ อัพเดทเกมส์สล็อตเข้าใหม่ทุกเดือน slotxoth รองรับในสิ่งที่ต้องการของคุณลูกค้าสมาชิกที่มีความนิยมการพนันพนัน ส่วนในเรื่องความถี่ของแจ็คพอตรวมทั้งเงินรางวัลโบนัสที่สูงที่สุด ยิ่งลงทุนมากมายก็ยิ่งได้ตังค์เยอะแยะแต่ว่าสำหรับท่านลูกค้าสมาชิกท่านใดที่เงินลงทุนน้อย slotxo ก็ได้โอกาสร่ำรวยได้เช่นเดียวกันเนื่องจากแจ็คพอตแตกสูงสุด 10 เท่าของเครดิตเพิ่มเติมพันอย่างยิ่งจริงๆ

    พูดได้ว่าถ้าได้แจ็คพอตมาเพียงแต่ครั้งเดียวก็มีแม้กระนั้นร่ำรวยกับมั่งมีอย่างแน่แท้เกมส์พนันออนไลน์ชนิดหนึ่งยอดนิยมอย่างใหญ่โต ในสังคมโลกสมัยโซเชี่ยลตอนนี้ เกมส์PGslotถูกปรับปรุงระบบบูรณาการเปลี่ยนแปลงมาจากเกมส์โจ๊กเกอร์ที่มีอยู่ในบ่อนคาสิโนและก็ได้ถูกปรับปรุงสร้างสรรคระบบย่อขนาดให้มาอยู่ในโลกอินเตอร์เน็ตให้ลูกค้าสมาชิกเข้าถึงได้อย่างสะดวกสบาย ดังเช่นในโทรศัพท์เคลื่อนที่หรือคอมพิวเตอร์ที่ทุกคนก็สามารถร่วมบันเทิงใจกันได้ทุกหนทุกแห่ง

    ReplyDelete
  46. Thank you for creating this blog. I am hoping this will be well-known to everyone so that it could help a lot.This blog looks very interesting. Its very catchy. I adore you for making this incredible.Thanks for sharing this site. Fantastic! Enjoyed reading the article above,your creative writing abilities has encouraged me to get my own, personal blog now 메이저사이트

    ReplyDelete
  47. และก็ยังสามารถติดตามเลขเด็ดจากกรุ๊ปคอสลากกินแบ่งของพวกเรากันได้ตลอดระยะเวลา huay เพราะเหตุว่ามีการอัพเดทเลขเด็ดจากเหล่าแฟนสลากกินแบ่งกันทั่วราชอาณาจักร นานาประการสำนักลอตเตอรี่ที่แม้ว่าท่านไหนยังไม่มีเลขเด็ดอยู่ในมือ สามารถนำไปแทงหวยได้เลยฟรีๆไม่เสียค่าบริการแล้วก็เว้นเสียแต่คุณจะได้เจอกับอัตราจ่ายลอตเตอรี่ที่ให้ท่านเยอะที่สุดแล้ว คุณยังสามารถที่จะร่วมรับโปรโมชั่นสำหรับในการชี้แนะสหายมาเดินพันพอดี ตรวจหวย ได้ค่าคอมมิชชั่น 8% ของยอดแทงหวย

    ReplyDelete
  48. Very useful post. This is my first time i visit here. I found so many interesting stuff in your blog especially its discussion. Really its great article. Keep it up.
    data analytics course in hyderabad

    ReplyDelete
  49. ซึ่งคุณไม่จำเป็นต้องกลุ้มใจว่าเข้ามาเล่นแล้วคุณจะพบกับบรรยากาศการแทงหวยแล้วก็อัตราที่ให้น้อยถัดไปอีก หวยหุ้น เพราะเหตุว่าเว็บไซต์พวกเรานั้นได้ขนกองทัพให้ท่านได้แทงหวยได้ตลอดระยะเวลาทุกวี่วัน 24 ชั่วโมง

    ทั้งยังมีสลากกินแบ่งทุกแบบอย่างที่คุณต้องการเล่น ไม่ว่าจะเป็นลอตเตอรี่ยี่กี ที่กำลังได้รับความนิยมเป็นอย่างมาก ที่คอลอตเตอรี่ก็ต่างรับประกันความเพลิดเพลินรวมทั้ง heng 168 อัตราการจ่ายที่ให้มากมายหรือจะเป็นสลากกินแบ่งหุ้น

    ReplyDelete
  50. Impressive. Your story always bring hope and new energy. Keep up the good work. Data Analytics Course in Vadodara

    ReplyDelete