Dynamics 365 使用插件实现自动编号

Dynamics 365 implementation auto number with plugin

我已经用插件实现了自动编号,它是通过另一种实体类型来确保所有操作都在一个事务中。 但我还有一个问题,那就是我们可以使用进程锁(例如互斥锁)来修复它吗?这会比以前更灵活,不是吗?

插件可以 运行 同时在多台机器上,具体取决于您的安装 - 这就是经常使用实体(数据库)锁的原因。

Dynamics 365 从 v9.0 开始就对自动编号字段提供了原生支持,只需要通过代码来操作它们会带来一些不便。 除非它是一个损坏的功能(它发生了),否则不再需要自定义自动编号。

https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/create-auto-number-attributes

示例:

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);

文档指出

The sequential segment is generated by SQL and hence uniqueness is guaranteed by SQL.

XrmToolbox 应该有一个插件来管理自动编号字段(因此更容易),但我没有尝试过。