ตารางลูกค้า (บัญชี ผู้ติดต่อ และที่อยู่ลูกค้า)

Microsoft Dataverse ตารางลูกค้า (account, contactและ customeraddress) จัดเก็บความสัมพันธ์ของลูกค้า รายละเอียดการติดต่อ และที่อยู่และข้อมูลการจัดส่ง บทความนี้อธิบายว่าตารางเหล่านี้เชื่อมโยงอย่างไรและวิธีการจัดการระเบียนที่อยู่ลูกค้าที่ฝังอยู่และว่างเปล่า

ตารางบัญชี

ตารางบัญชีเป็นหนึ่งในตารางใน Dataverse ซึ่งเป็นที่ตารางอื่นๆ ส่วนใหญ่นั้นแนบมาหรือเป็นรองจากตารางนี้ ใน Dataverse บัญชีแสดงถึงบริษัทที่หน่วยธุรกิจมีความสัมพันธ์ ข้อมูลที่รวมอยู่ในบัญชีคือข้อมูลการติดต่อที่เกี่ยวข้องทั้งหมด ข้อมูลบริษัท ประเภท ชนิดความสัมพันธ์ และข้อมูลที่อยู่ ข้อมูลอื่นๆ ที่มีรายการต่อไปนี้:

  • บัญชีสามารถเป็นบัญชีหลักสําหรับชนิดตารางส่วนใหญ่ รวมถึงบัญชีอื่น
  • บัญชีผู้ใช้สามารถเป็นตารางแบบสแตนด์อโลนได้
  • บัญชีผู้ใช้สามารถมีบัญชีได้เพียงบัญชีเดียวเท่านั้นในฐานะบัญชีหลัก
  • บัญชีสามารถมีบัญชีย่อยและผู้ติดต่อของบัญชีย่อยได้หลายรายการ

การจัดการบัญชีเป็นหนึ่งในแนวคิดสําคัญของการจัดการความสัมพันธ์กับลูกค้าในธุรกิจ (Dynamics 365) เนื่องจากองค์กรต้องการเห็นกิจกรรมทั้งหมดที่พวกเขามีกับบริษัทอื่น กิจกรรมทั้งหมดนี้มาบรรจบกันที่ระดับบัญชี ดูการอ้างอิงตาราง บัญชี

ตารางผู้ติดต่อ

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

ทั้งบัญชีและผู้ติดต่อเป็นส่วนหนึ่งของการจัดการลูกค้าและมีความเกี่ยวข้องกันในวิธีต่อไปนี้:

  • ผู้ติดต่อสามารถเป็นผู้ติดต่อหลักสําหรับตารางอื่นทั้งหมด ยกเว้นบัญชีและผู้ติดต่อ
  • ผู้ติดต่อสามารถมีบัญชีได้เพียงบัญชีเดียวเท่านั้นในฐานะบัญชีหลัก
  • คุณสามารถทําเครื่องหมายผู้ติดต่อเป็นผู้ติดต่อหลักสําหรับบัญชีได้โดยการตั้งค่า Account.PrimaryContactId คอลัมน์

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

การเชื่อมโยงตารางเช่นกิจกรรมและบันทึกย่อไปยัง contact ตารางช่วยให้ผู้ใช้สามารถดูการสื่อสารทั้งหมดที่ผู้ใช้มีกับลูกค้า การดําเนินการใด ๆ ที่ผู้ใช้ใช้ในนามของลูกค้า และข้อมูลทั้งหมดที่ผู้ใช้ต้องการเกี่ยวกับลูกค้า

ตาราง CustomerAddress

ตารางนี้ประกอบด้วยรายละเอียดที่อยู่และการจัดส่งเพิ่มเติมสําหรับบันทึกลูกค้า (บัญชีและผู้ติดต่อ) ตามค่าเริ่มต้น Dataverse จะสร้างระเบียนในตารางนี้อย่างน้อยสอง customeraddress ระเบียนเมื่อคุณสร้างระเบียนลูกค้าใหม่ แม้ว่าจะไม่มีข้อมูลสําหรับระเบียนเหล่านี้ก็ตาม เรียนรู้วิธีที่คุณสามารถเปลี่ยนลักษณะการทํางานนี้

คุณสามารถเข้าถึงเรกคอร์ดทั้งหมด customeraddress ที่เกี่ยวข้องกับเรกคอร์ดบัญชีและผู้ติดต่อผ่าน Account_CustomerAddress ความสัมพันธ์ และ Contact_CustomerAddress ได้ ทั้งสองความสัมพันธ์ใช้การค้นหาหลัก คอลัมน์ parentidtypecode ระบุชนิดของเรกคอร์ดลูกค้าที่เกี่ยวข้องกับที่อยู่

ข้อมูลที่อยู่ที่ฝังอยู่ในระเบียนลูกค้า

คุณสามารถดึงหรือแก้ไขข้อมูลของระเบียน customeraddress ฝังตัวสองหรือสามรายการร่วมกับระเบียนลูกค้าได้

  • ระเบียนบัญชีมีคอลัมน์ address1_addressid และaddress2_addressid
  • เรกคอร์ดผู้ติดต่อมีคอลัมน์ address1_addressid, address2_addressid และ address3_addressid

คอลัมน์เหล่านี้จะจัดเก็บ customeraddressid ค่าต่างๆ คอลัมน์ลูกค้าอื่น ๆ แต่ละคอลัมน์มีคํานําหน้าเป็น address1*, address2*หรือ address3*มีข้อมูลที่อยู่ที่สอดคล้องกันจาก customeraddress ตาราง

คอลัมน์ customeraddressaddressnumber จะระบุว่าที่อยู่ใดนําไปใช้กับคอลัมน์เรกคอร์ดลูกค้าหลัก คุณไม่สามารถตั้งค่า addressnumber คอลัมน์เป็นค่าที่ใช้โดยระเบียนอื่น customeraddress ที่เกี่ยวข้องกับลูกค้าหลักรายเดียวกันได้ คุณสามารถตั้งค่าที่มีอยู่ addressnumber เป็น 0 หรือ null จากนั้นเปลี่ยนค่าของระเบียนอื่นถ้าคุณต้องการสลับตําแหน่งสัมพัทธ์ของระเบียนสําหรับระเบียนลูกค้า แม้ว่า addressnumber จะมีการเพิ่มค่าในแต่ละระเบียนที่สร้างขึ้นสำหรับลูกค้า นอกเหนือจากการควบคุมตำแหน่งที่อยู่แบบฝังในระเบียนลูกค้า (ไม่ว่าจะเป็น 1, 2, หรือ 3) คอลัมน์ addressnumber ไม่มีการใช้ประโยชน์อื่นใด

Dataverse อัปเดตระเบียนเหล่านี้ customeraddress ผ่านคอลัมน์ระเบียนลูกค้าที่สอดคล้องกันเท่านั้นแทนที่จะอัปเดต customeraddress แถวโดยตรง อย่างไรก็ตาม ทุกคนสามารถแก้ไขระเบียนเหล่านี้เป็น customeraddress ระเบียน หรือเพิ่มระเบียนเพิ่มเติม customeraddress ที่เชื่อมโยงกับ account ระเบียน หรือ contact ที่ไม่ได้ถูกฝังเข้ากับระเบียนบัญชีและระเบียนที่ติดต่อ

ไม่อนุญาตให้ลบแถวที่อยู่ลูกค้าแบบฝังตัว

ตามค่าเริ่มต้น ถ้าคุณพยายามที่จะลบระเบียนฝัง customeraddress ตัวที่ address1_addressidการอ้างอิง , address2_addressidหรือ address3_addressid สําหรับระเบียนลูกค้า คุณจะได้รับข้อผิดพลาดเช่นข้อความแสดงข้อผิดพลาดต่อไปนี้:

ชื่อ: CannotDeleteDueToAssociation
รหัส: 0x80040227
เลข: -2147220953
ข้อความ: Customer Address can not be deleted because it is associated with another object. Address Id = 4f33c2e4-d5a3-4b03-b050-21984c0e4c15, AddressNumber=2, ParentId=4b757ff7-9c85-ee11-8179-000d3a9933c9, ObjectTypeCode=1

เรียนรู้วิธีที่คุณสามารถเปลี่ยนลักษณะการทํางานนี้

ปิดใช้งานการสร้างเรกคอร์ดที่ว่างเปล่า

แต่ละแถวในตาราง customeraddress จะนับรวมตามความจุ Dataverse ที่คุณจ่ายไป ดังนั้นคุณอาจต้องการลดค่าใช้จ่ายนี้

คุณสามารถบอก Dataverse ไม่ให้สร้างแถวตารางที่ว่างเปล่าcustomeraddressสําหรับแต่ละระเบียนลูกค้าโดยการเปลี่ยนการตั้งค่าปิดใช้งานระเบียนที่อยู่ว่างเปล่าในศูนย์การจัดการ Power Platform ก่อนที่จะเปลี่ยนลักษณะการทํางานนี้ ให้พิจารณาว่าคุณมีการเลือกกําหนดที่มีอยู่ซึ่งขึ้นอยู่กับลักษณะการทํางานเริ่มต้นหรือไม่ เรียนรู้เพิ่มเติมเกี่ยวกับการตั้งค่านี้

ขณะที่การตั้งค่านี้เปิดอยู่ จะไม่มีการสร้างแถวตารางที่ว่างเปล่า customeraddress ใหม่เมื่อมีการสร้างระเบียนลูกค้าใหม่ เรกคอร์ดจะถูกสร้างขึ้นเฉพาะเมื่อส่วนข้อมูลขาเข้ามีข้อมูลที่อยู่ โดยปกติแล้ว เพย์โหลดจะมีเฉพาะคอลัมน์ที่มีข้อมูลเท่านั้น ถ้าไม่มีข้อมูลสําหรับคอลัมน์ คอลัมน์จะไม่รวมอยู่ในส่วนข้อมูลและค่าจะเป็น null เมื่อบันทึกระเบียน อย่างไรก็ตาม ถ้าส่วนข้อมูลประกอบด้วยคอลัมน์ที่อยู่ที่มีค่าที่ตั้งค่าเป็น null ที่อยู่จะถูกสร้างขึ้นด้วยค่า null ถ้าคุณยังคงเห็นระเบียนเปล่าที่สร้างขึ้น ให้ตรวจสอบวิธีการสร้าง และดูว่าแอปพลิเคชันไคลเอ็นต์กําลังส่งข้อมูลคอลัมน์ที่มีค่า Null หรือไม่

หากปิดการตั้งค่า ปิดใช้งานการสร้างระเบียนที่อยู่ว่างเปล่า ลักษณะการทํางานเริ่มต้นจะดําเนินการต่อ การเปิดใช้งานการตั้งค่านี้จะไม่ลบแถวของตารางใด ๆ ที่มีอยู่customeraddress การสลับการตั้งค่านี้กลับไปหลังจากที่ปิดแล้ว จะไม่สร้างระเบียนที่ไม่ได้สร้างขึ้นใหม่

ตรวจสอบว่าการสร้างเรกคอร์ดที่อยู่ว่างเปล่าถูกปิดใช้งานหรือไม่

ฟังก์ชันตัวอย่างเหล่านี้แสดงวิธีการตรวจสอบว่าการตั้งค่า ปิดใช้งานการสร้างระเบียนที่อยู่ว่างเปล่า เปิดใช้งานในสภาพแวดล้อมหรือไม่

ฟังก์ชัน PowerShell นี้Test-IsEmptyAddressRecordCreationDisabledใช้คําสั่ง Microsoft Power Platform CLIpac env list-settings เพื่อตรวจสอบค่าในOrganization.OrgDbOrgSettingsคอลัมน์

function Test-IsEmptyAddressRecordCreationDisabled {

   $orgdborgsettings = pac env list-settings `
      --filter orgdborgsettings `
   | Where-Object { $_ -match '^orgdborgsettings\s+' } `
   | ForEach-Object { $_ -replace '^orgdborgsettings\s+', '' }

   $xml = [xml]$orgdborgsettings

   $element = $xml.SelectSingleNode("//CreateOnlyNonEmptyAddressRecordsForEligibleEntities")

   # Return true only when the element exists and has the value of 'true'
   return ($null -ne $element) -and ($element.InnerText -eq 'true')
}

เรียนรู้เพิ่มเติมเกี่ยวกับ Microsoft Power Platform CLI

ลบเรกคอร์ดที่อยู่แบบฝังตัว

ตามค่าเริ่มต้น คุณไม่สามารถลบแถวตารางแบบ customeraddress ฝังตัวที่มี address1_addressidคอลัมน์ , address2_addressidหรือ address3_addressid ในการอ้างอิงตารางลูกค้าได้ สําหรับข้อมูลเพิ่มเติม ดูไม่อนุญาตให้มีการลบแถวที่อยู่ลูกค้าแบบฝังตัว

การตั้งค่า เปิดใช้งานการลบระเบียนที่อยู่ ใน ศูนย์การจัดการ Power Platform จะเปลี่ยนแปลงลักษณะการทํางานนี้ เรียนรู้เพิ่มเติมเกี่ยวกับการตั้งค่านี้

ตรวจสอบว่ามีการเปิดใช้งานการลบเรกคอร์ดที่อยู่หรือไม่

ฟังก์ชันตัวอย่างเหล่านี้แสดงวิธีการตรวจหาว่าเปิดใช้งาน การลบระเบียนที่อยู่ การตั้งค่าเปิดใช้งานในสภาพแวดล้อมหรือไม่

ฟังก์ชัน PowerShell นี้Test-IsDeleteAddressRecordsEnabledใช้คําสั่ง Microsoft Power Platform CLIpac env list-settings เพื่อตรวจสอบEnableDeleteAddressRecordsค่าในOrganization.OrgDbOrgSettingsคอลัมน์

function Test-IsDeleteAddressRecordsEnabled {

   $orgdborgsettings = pac env list-settings `
      --filter orgdborgsettings `
   | Where-Object { $_ -match '^orgdborgsettings\s+' } `
   | ForEach-Object { $_ -replace '^orgdborgsettings\s+', '' }

   $xml = [xml]$orgdborgsettings

   $element = $xml.SelectSingleNode("//EnableDeleteAddressRecords")

   # Return true only when the element exists and has the value of 'true'
   return ($null -ne $element) -and ($element.InnerText -eq 'true')
}

เรียนรู้เพิ่มเติมเกี่ยวกับ Microsoft Power Platform CLI

การลบจํานวนมากของระเบียนที่อยู่ลูกค้าที่ว่างเปล่า

หลังจากที่คุณปิดใช้งานการสร้างเรกคอร์ดที่อยู่ที่ว่างเปล่าและเปิดใช้งานการลบเรกคอร์ดที่อยู่ ให้ใช้ฟังก์ชันตัวอย่างต่อไปนี้เพื่อลบเรกคอร์ดว่าง customeraddress แบบอะซิงโครนัสโดยใช้ BulkDelete ข้อความ

ตัวอย่างรหัสการลบจํานวนมาก

ฟังก์ชันเหล่านี้จะขึ้นอยู่กับ คอลัมน์/แอตทริบิวต์ของที่อยู่ (CustomerAddress) และไม่รวมคอลัมน์แบบกําหนดเองใดๆ ที่อาจอยู่ในสภาพแวดล้อมของคุณ คุณอาจต้องการเปลี่ยนคิวรีเหล่านี้ถ้าคุณต้องการรวมคอลัมน์แบบกําหนดเองของคุณ

ฟังก์ชัน Start-BulkDeleteEmptyCustomerAddressRecords PowerShell สร้างงานระบบเพื่อลบเรกคอร์ดที่ว่างเปล่าcustomeraddressโดยใช้คําสั่ง Microsoft Power Platform CLIpac data bulk-delete schedule

ฟังก์ชันนี้ขึ้นอยู่กับตัวอย่าง Test-IsDeleteAddressRecordsEnabled และ Test-IsEmptyAddressRecordCreationDisabled ฟังก์ชันที่อธิบายไว้ใน ตรวจหาว่ามีการเปิดใช้งานการลบเรกคอร์ดที่อยู่ หรือไม่ และ ตรวจสอบว่าการสร้างเรกคอร์ดที่อยู่ว่างเปล่าถูกปิดใช้งานหรือไม่ ตามลําดับ ฟังก์ชันจะสร้างงานเฉพาะเมื่อการตั้งค่าทั้งสองอนุญาตให้มีการลบเรกคอร์ดที่อยู่ลูกค้าที่ว่างเปล่าทั้งหมดและป้องกันไม่ให้มีการสร้างเรกคอร์ดที่ว่างเปล่าใหม่

function Start-BulkDeleteEmptyCustomerAddressRecords {

   if (!(Test-IsDeleteAddressRecordsEnabled)) {
      Write-Host 'Enable deletion of address records before running this function.'
      return
   }

   if (!(Test-IsEmptyAddressRecordCreationDisabled)) {
      Write-Host 'Disable empty address record creation before running this function.'
      return
   }

   $fetchXml = @(
      '<fetch>'
      "<entity name='customeraddress'>"
      "<attribute name='customeraddressid' />"
      "<filter type='and'>"
      "<condition attribute='city' operator='null' />"
      "<condition attribute='country' operator='null' />"
      "<condition attribute='county' operator='null' />"
      "<condition attribute='fax' operator='null' />"
      "<condition attribute='freighttermscode' operator='null' />"
      "<condition attribute='latitude' operator='null' />"
      "<condition attribute='line1' operator='null' />"
      "<condition attribute='line2' operator='null' />"
      "<condition attribute='line3' operator='null' />"
      "<condition attribute='longitude' operator='null' />"
      "<condition attribute='postalcode' operator='null' />"
      "<condition attribute='postofficebox' operator='null' />"
      "<condition attribute='primarycontactname' operator='null' />"
      "<condition attribute='shippingmethodcode' operator='null' />"
      "<condition attribute='stateorprovince' operator='null' />"
      "<condition attribute='telephone1' operator='null' />"
      "<condition attribute='telephone2' operator='null' />"
      "<condition attribute='telephone3' operator='null' />"
      "<condition attribute='upszone' operator='null' />"
      "<condition attribute='utcoffset' operator='null' />"
      '</filter>'
      '</entity>'
      '</fetch>'
   ) -join ''

   pac data bulk-delete schedule `
      --entity customeraddress `
      --fetchxml $fetchXml `
      --job-name 'Delete Empty Customer Address Records'
}