Dynamics 365 使用插件实现自动编号
Dynamics 365 implementation auto number with plugin
我已经用插件实现了自动编号,它是通过另一种实体类型来确保所有操作都在一个事务中。
但我还有一个问题,那就是我们可以使用进程锁(例如互斥锁)来修复它吗?这会比以前更灵活,不是吗?
插件可以 运行 同时在多台机器上,具体取决于您的安装 - 这就是经常使用实体(数据库)锁的原因。
Dynamics 365 从 v9.0 开始就对自动编号字段提供了原生支持,只需要通过代码来操作它们会带来一些不便。
除非它是一个损坏的功能(它发生了),否则不再需要自定义自动编号。
示例:
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 应该有一个插件来管理自动编号字段(因此更容易),但我没有尝试过。
我已经用插件实现了自动编号,它是通过另一种实体类型来确保所有操作都在一个事务中。 但我还有一个问题,那就是我们可以使用进程锁(例如互斥锁)来修复它吗?这会比以前更灵活,不是吗?
插件可以 运行 同时在多台机器上,具体取决于您的安装 - 这就是经常使用实体(数据库)锁的原因。
Dynamics 365 从 v9.0 开始就对自动编号字段提供了原生支持,只需要通过代码来操作它们会带来一些不便。 除非它是一个损坏的功能(它发生了),否则不再需要自定义自动编号。
示例:
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 应该有一个插件来管理自动编号字段(因此更容易),但我没有尝试过。