หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ตาราง บัญชี และ ผู้ติดต่อ จําเป็นสําหรับการระบุและจัดการลูกค้า ขายผลิตภัณฑ์และบริการ และให้บริการที่เหนือกว่าแก่ลูกค้า ตาราง 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 การสลับการตั้งค่านี้กลับไปหลังจากที่ปิดแล้ว จะไม่สร้างระเบียนที่ไม่ได้สร้างขึ้นใหม่
ตรวจสอบว่าการสร้างเรกคอร์ดที่อยู่ว่างเปล่าถูกปิดใช้งานหรือไม่
ฟังก์ชันตัวอย่างเหล่านี้แสดงวิธีการตรวจสอบว่าการตั้งค่า ปิดใช้งานการสร้างระเบียนที่อยู่ว่างเปล่า เปิดใช้งานในสภาพแวดล้อมหรือไม่
เมธอดแบบคงที่IsEmptyAddressRecordCreationDisabledนี้ใช้คลาส WhoAmIRequest และเมธอด IOrganizationService.Retrieve เพื่อตรวจสอบค่าในคอลัมน์ Organization.OrgDbOrgSettings
static bool IsEmptyAddressRecordCreationDisabled(IOrganizationService service)
{
Guid orgId = ((WhoAmIResponse)service
.Execute(new WhoAmIRequest())).OrganizationId;
Entity organization = service
.Retrieve("organization", orgId, new ColumnSet("orgdborgsettings"));
XDocument orgdborgsettings = XDocument
.Parse((string)organization["orgdborgsettings"]);
XElement? element = orgdborgsettings
.XPathSelectElement("//CreateOnlyNonEmptyAddressRecordsForEligibleEntities");
// Return true only when the element exists and has the value of 'true'
return element != null && element.Value == "true";
}
ลบเรกคอร์ดที่อยู่แบบฝังตัว
ตามค่าเริ่มต้น คุณไม่สามารถลบแถวตารางแบบ customeraddress ฝังตัวที่อ้างอิงโดย address1_addressidคอลัมน์ , address2_addressidหรือ address3_addressid ในตารางลูกค้าได้ การลบแถวที่อยู่ลูกค้าแบบฝังตัวไม่อนุญาต
การตั้งค่า เปิดใช้งานการลบระเบียนที่อยู่ ใน ศูนย์การจัดการ Power Platform จะเปลี่ยนแปลงลักษณะการทํางานนี้ เรียนรู้เพิ่มเติมเกี่ยวกับการตั้งค่านี้
ตรวจสอบว่ามีการเปิดใช้งานการลบเรกคอร์ดที่อยู่หรือไม่
ฟังก์ชันตัวอย่างเหล่านี้แสดงวิธีการตรวจหาว่าเปิดใช้งาน การลบระเบียนที่อยู่ การตั้งค่าเปิดใช้งานในสภาพแวดล้อมหรือไม่
วิธีการแบบคงที่ IsDeleteAddressRecordsEnabled นี้ใช้ คลาส WhoAmIRequest และ เมธอด IOrganizationService.Retrieve เพื่อตรวจสอบค่าใน คอลัมน์ Organization.OrgDbOrgSettings
static bool IsDeleteAddressRecordsEnabled(IOrganizationService service)
{
Guid orgId = ((WhoAmIResponse)service
.Execute(new WhoAmIRequest())).OrganizationId;
Entity organization = service
.Retrieve("organization", orgId, new ColumnSet("orgdborgsettings"));
XDocument orgdborgsettings = XDocument
.Parse((string)organization["orgdborgsettings"]);
XElement? element = orgdborgsettings
.XPathSelectElement("//EnableDeleteAddressRecords");
// Return true only when the element exists and has the value of 'true'
return element != null && element.Value == "true";
}
การลบจํานวนมากของระเบียนที่อยู่ลูกค้าที่ว่างเปล่า
หลังจากที่คุณปิดใช้งานการสร้างเรกคอร์ดที่อยู่ที่ว่างเปล่าและเปิดใช้งานการลบเรกคอร์ดที่อยู่ คุณสามารถใช้ฟังก์ชันตัวอย่างต่อไปนี้เพื่อลบเรกคอร์ดที่ว่างเปล่า customeraddress โดยใช้ BulkDelete ข้อความแบบอะซิงโครนัส
ฟังก์ชันเหล่านี้จะขึ้นอยู่กับ คอลัมน์/แอตทริบิวต์ของที่อยู่ (CustomerAddress) และไม่รวมคอลัมน์แบบกําหนดเองใดๆ ที่อาจอยู่ในสภาพแวดล้อมของคุณ คุณอาจต้องการเปลี่ยนคิวรีเหล่านี้ถ้าคุณต้องการรวมคอลัมน์แบบกําหนดเองของคุณ
เมธอดแบบคงที่BulkDeleteEmptyCustomerAddressRecordsสร้างงานระบบเพื่อลบเรกคอร์ดที่ว่างเปล่าcustomeradddressโดยใช้คลาส BulkDeleteRequest
วิธีนี้ใช้ตัวอย่าง IsDeleteAddressRecordsEnabled และ IsEmptyAddressRecordCreationDisabled เมธอดแบบคงที่ที่อธิบายไว้ใน ตรวจหาว่ามีการเปิดใช้งานการลบเรกคอร์ดที่อยู่ หรือไม่ และ ตรวจสอบว่าการสร้างเรกคอร์ดที่อยู่ว่างเปล่าถูกปิดใช้งาน ตามลําดับเพื่อให้แน่ใจว่าการตั้งค่าเหล่านี้ได้รับการกําหนดค่าเพื่ออนุญาตให้ลบเรกคอร์ดที่อยู่ลูกค้าที่ว่างเปล่าทั้งหมดและตรวจสอบให้แน่ใจว่าไม่มีการสร้างใหม่
/// <summary>
/// Create a Bulk Delete job to delete empty customer address records
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance.</param>
/// <returns>The Id of the system job</returns>
/// <exception cref="Exception"></exception>
static Guid BulkDeleteEmptyCustomerAddressRecords(IOrganizationService service)
{
if (!IsDeleteAddressRecordsEnabled(service))
{
throw new Exception("Enable deletion of address records" +
" before running this method.");
}
if (!IsEmptyAddressRecordCreationDisabled(service))
{
throw new Exception("Disable empty address record creation" +
" before running this method.");
}
var query = new QueryExpression("customeraddress")
{
ColumnSet = new ColumnSet("customeraddressid"),
Criteria =
{
Conditions =
{
new ConditionExpression("city", ConditionOperator.Null),
new ConditionExpression("country", ConditionOperator.Null),
new ConditionExpression("county", ConditionOperator.Null),
new ConditionExpression("fax", ConditionOperator.Null),
new ConditionExpression("freighttermscode", ConditionOperator.Null),
new ConditionExpression("latitude", ConditionOperator.Null),
new ConditionExpression("line1", ConditionOperator.Null),
new ConditionExpression("line2", ConditionOperator.Null),
new ConditionExpression("line3", ConditionOperator.Null),
new ConditionExpression("longitude", ConditionOperator.Null),
new ConditionExpression("postalcode", ConditionOperator.Null),
new ConditionExpression("postofficebox", ConditionOperator.Null),
new ConditionExpression("primarycontactname", ConditionOperator.Null),
new ConditionExpression("shippingmethodcode", ConditionOperator.Null),
new ConditionExpression("stateorprovince", ConditionOperator.Null),
new ConditionExpression("telephone1", ConditionOperator.Null),
new ConditionExpression("telephone2", ConditionOperator.Null),
new ConditionExpression("telephone3", ConditionOperator.Null),
new ConditionExpression("upszone", ConditionOperator.Null),
new ConditionExpression("utcoffset", ConditionOperator.Null)
}
}
};
BulkDeleteRequest request = new()
{
QuerySet = new QueryExpression[] { query },
StartDateTime = DateTime.UtcNow,
RecurrencePattern = string.Empty,
SendEmailNotification = false,
JobName = "Delete empty customer address records",
ToRecipients = new List<Guid>().ToArray(),
CCRecipients = new List<Guid>().ToArray()
};
var response = (BulkDeleteResponse)service.Execute(request);
return response.JobId;
}