แชร์ผ่าน


สร้างแอตทริบิวต์การกําหนดหมายเลขอัตโนมัติ

ด้วยรุ่น Dynamics 365 Customer Engagement (on-premises) รุ่น 9 คุณสามารถเพิ่มแอตทริบิวต์หมายเลขอัตโนมัติสําหรับเอนทิตีใดๆ ได้ ปัจจุบัน คุณสามารถเพิ่มแอตทริบิวต์โดยทางโปรแกรมได้ ไม่มีส่วนติดต่อผู้ใช้เพื่อเพิ่มแอตทริบิวต์ชนิดนี้ บทความนี้อธิบายวิธีที่คุณสามารถสร้างแอตทริบิวต์หมายเลขอัตโนมัติโดยทางโปรแกรม และตั้งค่าเมล็ดพันธุ์สําหรับองค์ประกอบตามลําดับ นอกจากนี้ บทความนี้แสดงวิธีการตั้งค่าหมายเลขลําดับสําหรับเรกคอร์ดถัดไปหากคุณต้องการรีเซ็ตเมล็ดพันธุ์เมื่อใดก็ได้ในภายหลัง

หมายเหตุ

การตั้งค่าเมล็ดพันธุ์เป็นทางเลือก ไม่จําเป็นต้องเรียกข้อมูลเริ่มต้น หากคุณไม่จําเป็นต้องใช้ข้อมูลเริ่มต้น

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

เมื่อสร้างแอตทริบิวต์หมายเลขอัตโนมัติ คุณสมบัติ StringAttributeMetadata.FormatName หรือค่าคุณสมบัติ StringAttributeMetadata.Format ต้องเป็น Text เนื่องจากเป็นค่าเริ่มต้น คุณจึงจะไม่ตั้งค่าคุณสมบัตินี้ คุณไม่สามารถสร้างแอตทริบิวต์หมายเลขอัตโนมัติที่ใช้รูปแบบพิเศษอื่นๆ เช่น อีเมล โทรศัพท์ พื้นที่ข้อความ URL หรือรูปแบบอื่นๆ ที่มีอยู่

การจัดลําดับหมายเลขอัตโนมัติได้รับการจัดการโดย SQL และมั่นใจได้ว่าไม่ซ้ํากัน

หมายเหตุ

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

หมายเหตุ

คุณสามารถปรับเปลี่ยนแอตทริบิวต์ข้อความรูปแบบที่มีอยู่ให้เป็นรูปแบบการกําหนดหมายเลขอัตโนมัติได้

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

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงวิธีการสร้างแอตทริบิวต์หมายเลขอัตโนมัติใหม่ที่ชื่อ new_SerialNumber สําหรับเอนทิตีแบบกําหนดเองที่ชื่อ new_Widget ซึ่งจะมีค่าที่มีลักษณะดังนี้: WID-00001-AB7LSFG-20170913070240 การใช้บริการองค์กรกับแอสเซมบลี SDK คลาส CreateAttributeRequest และ StringAttributeMetadata :

CreateAttributeRequest widgetSerialNumberAttributeRequest = new CreateAttributeRequest
            {
                EntityName = "newWidget",
                Attribute = new StringAttributeMetadata
                {
                    //Define the format of the attribute
                    AutoNumberFormat = "WID-{SEQNUM:5}-{RANDSTRING:6}-{DATETIMEUTC:yyyyMMddhhmmss}",
                    LogicalName = "new_serialnumber",
                    SchemaName = "new_SerialNumber",
                    RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
                    MaxLength = 100, // The MaxLength defined for the string attribute must be greater than the length of the AutoNumberFormat value, that is, it should be able to fit in the generated value.
                    DisplayName = new Label("Serial Number", 1033),
                    Description = new Label("Serial Number of the widget.", 1033)
                }
            };
            _serviceProxy.Execute(widgetSerialNumberAttributeRequest);

ใช้ Web API

คุณสามารถสร้างและอัปเดตข้อกําหนดเอนทิตีได้โดยใช้ Web API

ข้อมูลเพิ่มเติม: สร้างและอัปเดตข้อกําหนดเอนทิตีโดยใช้แอตทริบิวต์ Web API > Create

ส่งคำขอ

POST [Organization URI]/api/data/v9.1/EntityDefinitions(LogicalName='new_widget')/Attributes HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
 "AttributeType": "String",
 "AttributeTypeName": {
  "Value": "StringType"
 },
 "Description": {
  "@odata.type": "Microsoft.Dynamics.CRM.Label",
  "LocalizedLabels": [
   {
    "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
    "Label": "Serial Number of the widget.",
    "LanguageCode": 1033
   }
  ]
 },
 "DisplayName": {
  "@odata.type": "Microsoft.Dynamics.CRM.Label",
  "LocalizedLabels": [
   {
    "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
    "Label": "Serial Number",
    "LanguageCode": 1033
   }
  ]
 },
 "RequiredLevel": {
  "Value": "None",
  "CanBeChanged": true,
  "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings"
 },
 "SchemaName": "new_SerialNumber",
 "AutoNumberFormat": "WID-{SEQNUM:5}-{RANDSTRING:6}-{DATETIMEUTC:yyyyMMddhhmmss}",
 "@odata.type": "Microsoft.Dynamics.CRM.StringAttributeMetadata",
 "FormatName": {
  "Value": "Text"
 },
 "MaxLength": 100
}

การตอบสนอง

HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.1/EntityDefinitions(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)/Attributes(11bb11bb-cc22-dd33-ee44-55ff55ff55ff)

ตัวเลือก AutoNumberFormat

ตัวอย่างเหล่านี้แสดงวิธีที่คุณสามารถกําหนดค่าคุณสมบัติ AutoNumberFormat เพื่อให้ได้ผลลัพธ์ที่แตกต่างกัน:

ค่า AutoNumberFormat ค่าตัวอย่าง
CAR-{SEQNUM:3}-{RANDSTRING:6} CAR-123-AB7LSF
CNR-{RANDSTRING:4}-{SEQNUM:4} CNR-WXYZ-1000
{SEQNUM:6}-#-{RANDSTRING:3} 123456-#-R3V
KA-{SEQNUM:4} KA-0001
{SEQNUM:10} 1234567890
QUO-{SEQNUM:3}#{RANDSTRING:3}#{RANDSTRING:5} QUO-123#ABC#PQ2ST
QUO-{SEQNUM:7}{RANDSTRING:5} QUO-0001000P9G3R
CAS-{SEQNUM:6}-{RANDSTRING:6}-{DATETIMEUTC:yyyyMMddhhmmss} CAS-002000-S1P0H0-20170913091544
CAS-{SEQNUM:6}-{DATETIMEUTC:yyyyMMddhh}-{RANDSTRING:6} CAS-002002-2017091309-HTZOUR
CAS-{SEQNUM:6}-{DATETIMEUTC:yyyyMM}-{RANDSTRING:6}-{DATETIMEUTC:hhmmss} CAS-002000-201709-Z8M2Z6-110901

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

ความยาวสตริง

ตารางแสดงค่าความยาวสตริงสําหรับตัวยึดตําแหน่งแบบสุ่มและตามลําดับ

ตัวกำหนดตำแหน่ง ความยาวสตริง สถานการณ์เอาต์พุต
{RANDSTRING:MIN_LENGTH} ค่าของ MIN_LENGTH อยู่ระหว่าง 1 ถึง 6 เมื่อคุณบันทึกเอนทิตี แอตทริบิวต์หมายเลขอัตโนมัติจะสร้างสตริงแบบสุ่มที่มีความยาวที่กําหนดไว้หากค่าอยู่ระหว่าง 1 ถึง 6 หากคุณใช้ค่า MIN_LENGTH เป็น 7 หรือเกิน 7 คุณจะเห็นข้อผิดพลาดอาร์กิวเมนต์ไม่ถูกต้อง
{SEQNUM:MIN_LENGTH} ค่าต่ําสุดของ MIN_LENGTH คือ 1 ตัวเลขยังคงเพิ่มขึ้นเกินความยาวขั้นต่ํา เมื่อคุณบันทึกเอนทิตี แอตทริบิวต์หมายเลขอัตโนมัติจะทํางานได้ดีและยังคงทํางานได้ดีสําหรับค่า MIN_LENGTH ที่ใหญ่กว่า

สําหรับตัวยึดค่าตามลําดับ MIN_LENGTH คือความยาวขั้นต่ํา ถ้าคุณตั้งค่าเป็น 2 ค่าเริ่มต้นจะเป็น 01 และค่าเอนทิตีที่ 100 จะเป็น 100 ตัวเลขจะเพิ่มขึ้นอย่างต่อเนื่องเกินความยาวขั้นต่ํา ค่าในการตั้งค่าความยาวสําหรับค่าตามลําดับคือการสร้างความยาวที่สอดคล้องกันสําหรับค่าที่สร้างขึ้นโดยอัตโนมัติโดยการเพิ่ม 0 เพิ่มเติมให้กับค่าเริ่มต้น จะไม่มีการจำกัดค่าสัมบูรณ์ ตัวยึดค่าแบบสุ่มจะมีความยาวเท่ากันเสมอ

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

หมายเหตุ

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

อัปเดตแอตทริบิวต์การกําหนดหมายเลขอัตโนมัติ

หากคุณสร้างแอตทริบิวต์หมายเลขอัตโนมัติที่มีการกําหนดค่าไม่ถูกต้อง หรือต้องการแก้ไขแอตทริบิวต์หมายเลขอัตโนมัติที่มีอยู่ คุณสามารถอัปเดตแอตทริบิวต์ค่า AutoNumberFormat ได้

ข้อมูลโค้ดต่อไปนี้จะอธิบายให้คุณดึงข้อมูล แก้ไข และอัปเดตแอตทริบิวต์หมายเลขอัตโนมัติ

เมื่อต้องการแก้ไขแอตทริบิวต์หมายเลขอัตโนมัติที่มีอยู่ คุณต้องดึงแอตทริบิวต์โดยใช้คลาส RetrieveAttributeRequest

// Create the retrieve request
RetrieveAttributeRequest attributeRequest = new RetrieveAttributeRequest
            {
                EntityLogicalName = entityName.ToLower(),
                LogicalName = "new_serialnumber",
                RetrieveAsIfPublished = true
            };
// Retrieve attribute response
RetrieveAttributeResponse attributeResponse = (RetrieveAttributeResponse)_serviceProxy.Execute(attributeRequest);

หลังจากดึงแอตทริบิวต์หมายเลขอัตโนมัติแล้ว คุณจําเป็นต้องแก้ไขและอัปเดตแอตทริบิวต์

//Modify the retrieved auto-number attribute
AttributeMetadata retrievedAttributeMetadata = attributeResponse.AttributeMetadata;
retrievedAttributeMetadata.AutoNumberFormat = "CAR-{RANDSTRING:5}{SEQNUM:6}"; //Modify the existing attribute by writing the format as per your requirement 

// Update the auto-number attribute            
UpdateAttributeRequest updateRequest = new UpdateAttributeRequest
                        {
                            Attribute = retrievedAttributeMetadata,
                            EntityName = "newWidget",
                        };
// Execute the request
_serviceProxy.Execute(updateRequest);

ตั้งค่าเมล็ดพันธุ์

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

ตัวอย่างเช่น ถ้าคุณไม่ได้ใช้ค่าเมล็ดพันธุ์ หรือถ้าคุณตั้งค่าเมล็ดพันธุ์เป็นตัวเลขเดียว ตัวเลขแรกของคุณจะเป็นตัวเลขหลักเดียวที่มีการเพิ่มคํานําหน้าเป็นศูนย์ให้เท่ากับความยาวของตัวเลข ค่าตัวเลขหลักเดียวที่เมื่อแสดงผลจะมีความยาว 5 หลัก จะทำให้ตัวเลข "5" แสดงเป็น "00005" การใช้ค่าเมล็ดพันธุ์ช่วยให้คุณเริ่มต้นด้วยค่าเริ่มต้นที่ใหญ่ขึ้น ดังนั้นหากคุณตั้งค่าเมล็ดพันธุ์เป็น "10000" ค่า 5 จะแสดงเป็น "10005"

ถ้าคุณต้องการเลือกค่าเริ่มต้นอื่นหลังจากสร้างแอตทริบิวต์การกําหนดหมายเลขอัตโนมัติ ให้ใช้ข้อความ SetAutoNumberSeed ใช้คลาส SetAutoNumberSeedRequest เมื่อใช้แอสเซมบลี SDK และการดําเนินการ SetAutoNumberSeed เมื่อใช้ Web API

ข้อความ AutoNumberSeed มีพารามิเตอร์ต่อไปนี้:

ชื่อ ชนิด คำอธิบาย:
ชื่อเอนทิตี สตริง ชื่อตรรกะของเอนทิตีที่มีแอตทริบิวต์ที่คุณต้องการตั้งค่าเมล็ดพันธุ์
ชื่อแอตทริบิวต์ สตริง ชื่อตรรกะของแอตทริบิวต์ที่คุณต้องการตั้งค่าตัวเลือก
ค่า int ค่าหมายเลขอัตโนมัติถัดไปสําหรับแอตทริบิวต์

หมายเหตุ

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

ตัวอย่าง

ตัวอย่างต่อไปนี้ตั้งค่าเมล็ดพันธุ์เป็น 10000 สําหรับแอตทริบิวต์หมายเลขอัตโนมัติที่ชื่อ new_SerialNumber สําหรับเอนทิตีแบบกําหนดเองที่ชื่อ new_Widget

การใช้บริการองค์กรร่วมกับแอสเซมบลีของ SDK คลาส SetAutoNumberSeedRequest:

//Define the seed 
SetAutoNumberSeedRequest req = new SetAutoNumberSeedRequest();
req.EntityName = "newWidget";
req.AttributeName = "newSerialnumber";
req.Value = 10000;
_serviceProxy.Execute(req);

การใช้ Action ของ Web API SetAutoNumberSeed

ข้อมูลเพิ่มเติม: ใช้การดำเนินการ Web API > การดำเนินการที่ไม่ถูกผูกมัด

ส่งคำขอ

POST [Organization URI]/api/data/v9.1/SetAutoNumberSeed HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
 "EntityName": "new_Widget",
 "AttributeName": "new_Serialnumber",
 "Value": 10000
} 

การตอบสนอง

HTTP/1.1 204 No Content
OData-Version: 4.0

เครื่องมือของชุมชน

ตัวจัดการหมายเลขอัตโนมัติ

ตัวจัดการหมายเลขอัตโนมัติ สําหรับ XrmToolBox เป็นเครื่องมือที่ขับเคลื่อนด้วยชุมชนสําหรับ Dynamics 365 Customer Engagement (on-premises) ที่มี UI เพื่อตั้งค่า อัปเดต และลบรูปแบบหมายเลขอัตโนมัติในแอตทริบิวต์ใหม่หรือที่มีอยู่ ดูบทความ เครื่องมือสําหรับนักพัฒนาสําหรับ เครื่องมือที่พัฒนาโดยชุมชนและ anm.xrmtoolbox.com สําหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวจัดการหมายเลขอัตโนมัติ

หมายเหตุ

เครื่องมือของชุมชนไม่ใช่ผลิตภัณฑ์ของ Microsoft Dynamics และไม่ขยายการสนับสนุนไปยังเครื่องมือของชุมชน ถ้าคุณมีคำถามที่เกี่ยวข้องกับเครื่องมือ โปรดติดต่อผู้เผยแพร่ ข้อมูลเพิ่มเติม: XrmToolBox

ดูเพิ่มเติม

ข้อมูลเมตาและโมเดลข้อมูล
ปรับแต่งข้อมูลเมตาของแอตทริบิวต์เอนทิตี