2011 年の MS のカスタマー ポータルを拡張して、注文を追加する機能を追加しました。
2 人以上のユーザーが同時に注文を作成しようとすると、問題が発生しました。
まず、SalesOrder を次のように作成しました。
order = new SalesOrder();
order.SalesOrderId = OrderID;
order.Name = string.Format("Order {0}", DateTime.Now);
order.CustomerId = parentCustomer;
order.PriceLevelId = priceLevel.ToEntityReference();
OrderID = XrmContext.Create(order);
この後、foreachで製品(SalesOrderDetail)を追加しました:
foreach (var product in OrdredProducts)
{
productToAdd = new SalesOrderDetail
{
SalesOrderId = new CrmEntityReference(SalesOrder.EntityLogicalName,
OrderID),
ProductId = new EntityReference(Product.EntityLogicalName,
product.ProductID),
Quantity = product.Quantity
};
XrmContext.Create(productToAdd);
}
これは、1 人のユーザーが何かを注文した場合にうまく機能します。しかし、2 人以上のユーザーの場合、両方のユーザーでエラーが発生します。
だから私はこれにコードを変更しました:
order = new SalesOrder();
OrderID = Guid.NewGuid();
order.SalesOrderId = OrderID;
order.Name = string.Format("Order {0}", DateTime.Now); //:d
order.CustomerId = parentCustomer;
order.PriceLevelId = priceLevel.ToEntityReference();
XrmContext.AddObject(order);
foreach (var product in OrdredProducts)
{
productToAdd = new SalesOrderDetail
{
SalesOrderId = new CrmEntityReference(SalesOrder.EntityLogicalName,
OrderID),
ProductId = new EntityReference(Product.EntityLogicalName,
product.ProductID),
Quantity = product.Quantity
};
XrmContext.AddObject(productToAdd);
}
XrmContext.SaveChanges();
2 人以上のユーザーが何かを注文した場合、最初の試行のように両方が失敗するのではなく、1 人のユーザーだけが失敗するようになりました。
私がこれまでに得たエラー(毎回他のエラー):
- ValidateOpen - 破棄してはならないときに、破棄された CrmDbConnection に遭遇しました
- SQL タイムアウトの期限が切れました。
- 予期せぬエラーが発生した。
- 組織 {guid) の次の番号 (currentordernumber) を取得中にエラーが発生しました: 戻り値が空です
- System.InvalidOperationException: Microsoft Dynamics CRM でエラーが発生しました。管理者またはサポートの照会番号: #F60BF6A2
問題がどこにある可能性があるかについての提案はありますか?それは SQL Server/CRM Server/IIS/my code ですか、それとも別のものですか?
追加情報
- SQL Server と CRM Server が同じマシン上にない
- VS2012サーバーでテストすると同じエラーが発生します(バックエンドは同じSQL/CRMサーバーです)
- 1 人のユーザーが IIS で実行し、もう 1 人が VS2012 (デバッグ) で実行すると、同じエラーが発生します。
edit
XrmContext は XrmServiceContext タイプであり、これは CrmOrganizationServiceContext から派生し、これは crmsvcutil で生成されます