---
title: "注文処理(C#)との連携"
slug: "work-with-orders-fulfillment--c--"
abstract: "Sitecore XC Orders Entity Views and Actions APIを使って、C#プログラミングを使って注文の履行を設定する方法。"
---
# 注文処理(C#)との連携

Orders Entity Views and Actions APIは [、注文の履行](https://doc.sitecore.com/xp/ja/developers/102/sitecore-experience-commerce/fulfillment-service.html "Fulfillment service")を設定する操作をサポートします。出荷情報は、注文を構成するアイテムが顧客に転送される方法を定義します。フルフィルメントを注文全体に適用するか、注文内の個別の項目に適用するかを設定できます。

*保留*中の注文に対してのみフルフィルメントを設定できます。

以下の例は以下の方法を示しています:

-   [注文履行を設定し(C#)](https://doc.sitecore.com/xp/ja/developers/102/sitecore-experience-commerce/work-with-orders-fulfillment--c--.html#UUID-a1e6ceb5-5957-e533-c076-eb325aae5881_section-idm46006371096720 "Set order fulfillment (C#)")
-   [分割配送(C#)で注文ラインの履行を設定しましょう](https://doc.sitecore.com/xp/ja/developers/102/sitecore-experience-commerce/work-with-orders-fulfillment--c--.html#UUID-a1e6ceb5-5957-e533-c076-eb325aae5881_section-idm46006370854912 "Set order lines fulfillment for split shipping (C#)")

## 注文履行を設定し(C#)

発注レベルでフルフィルメントを設定すれば、その注文内のすべてのライン注文にフルフィルメント情報が適用されるようにできます。

例えば有形品目に対して注文の履行を設定するには、C#を用いてください:

1.  エンティティビューを取得し、例えばShipToMeの履行オプションを指定します。
    
    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-Order-{orderId}", "OrderFulfillmentDetails", "SelectFulfillmentOption", string.Empty);
    EntityView view = Proxy.GetValue(query);
    var optionProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Option"));
    var availableOptionsPolicy = optionProperty.Policies.OfType<AvailableSelectionsPolicy>().FirstOrDefault();
    optionProperty.Value = availableOptionsPolicy?.List.FirstOrDefault(o => o.Name.Equals("ShipToMe")).Name;
    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));
    
2.  配送先住所は国を指定します:
    
    view = command.Models.OfType<EntityView>().FirstOrDefault(v => v.Name.Equals(view.Name));
    var countryProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Country"));
    countProperty.Value = "3";
    var availableCountryPolicy = optionProperty.Policies.OfType<AvailableSelectionsPolicy>().FirstOrDefault();
    countryProperty.Value = availableCountryPolicy?.List.FirstOrDefault(o => o.Name.Equals("CA")).Name;
    command = Proxy.DoCommand(container.DoAction(view));
    
3.  残りのアドレスプロパティを例として提供します:
    
    view = command.Models.OfType<EntityView>().FirstOrDefault(v => v.Name.Equals(view.Name));
    var stateProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("State"));
    var availableStatesPolicy = stateProperty.Policies.OfType<AvailableSelectionsPolicy>().FirstOrDefault();
    stateProperty.Value = availableStatesPolicy?.List.FirstOrDefault(o => o.Name.Equals("ON")).Name;
    view.Properties.FirstOrDefault(p => p.Name.Equals("AddressName")).Value = "home";
    view.Properties.FirstOrDefault(p => p.Name.Equals("FirstName")).Value = "john";
    view.Properties.FirstOrDefault(p => p.Name.Equals("LastName")).Value = "doe";
    view.Properties.FirstOrDefault(p => p.Name.Equals("Address1")).Value = "123 street A";
    view.Properties.FirstOrDefault(p => p.Name.Equals("City")).Value = "city";
    view.Properties.FirstOrDefault(p => p.Name.Equals("ZipPostalCode")).Value = "a1b2c3d";
    view.Properties.FirstOrDefault(p => p.Name.Equals("PhoneNumber")).Value = "123 123 1234";
    command = Proxy.DoCommand(container.DoAction(view));
    
4.  履行方法を選択してください。以下の例は地上輸送を使用しています:
    
    view = command.Models.OfType<EntityView>().FirstOrDefault(v => v.Name.Equals(view.Name));
    var methodProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("State"));var availableMethodsPolicy = methodProperty.Policies.OfType<AvailableSelectionsPolicy>().FirstOrDefault();
    methodProperty.Value = availableMethodsPolicy?.List.FirstOrDefault(o => o.DisplayName.Equals("Ground")).Name;
    command = Proxy.DoCommand(container.DoAction(view));
## 分割配送(C#)で注文ラインの履行を設定しましょう

一部のビジネスシナリオでは、ラインアイテムレベルでフルフィルメントが適用される必要があります。以下の例は、同じ注文内の2つのラインアイテムが異なるフルフィルメントオプションを使用する分割配送シナリオを示しています。 *ラインアイテム#1*は地上配送を利用し、配送に住所情報が必要な有形製品を表します。 *ラインアイテム#2*は、配送にメールアドレスが必要なデジタル製品を表します。

配送分割のラインレベルで注文完了オプションを設定するには:

1.  注文フルフィルメントオプションを *配送分割*に設定し、各項目ごとに異なる出荷情報を指定できるようにしてください:
    
    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-Order-{orderId}", "OrderFulfillmentDetails", "SelectFulfillmentOption", string.Empty);
    EntityView view = Proxy.GetValue(query);
    var optionProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Option"));
    var availableOptionsPolicy = optionProperty.Policies.OfType<AvailableSelectionsPolicy>().FirstOrDefault();
    optionProperty.Value = availableOptionsPolicy?.List.FirstOrDefault(o => o.Name.Equals("SplitShipping")).Name;
    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));
    
2.  *項目項目#1*(この例では有形製品)のフルフィルメント情報を設定するには、*項目項目#1*のフルフィルメントオプションを選択してください:
    
    EntityView view = Proxy.GetValue(query);
    var optionProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Option"));
    var availableOptionsPolicy = optionProperty.Policies.OfType<AvailableSelectionsPolicy>().FirstOrDefault();
    optionProperty.Value = availableOptionsPolicy?.List.FirstOrDefault(o => o.Name.Equals("ShipToMe")).Name;
    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));
    
3.  例えば、*項目#1*の国を指定します:
    
    view = command.Models.OfType<EntityView>().FirstOrDefault(v => v.Name.Equals(view.Name));
    var countryProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Country"));
    countProperty.Value = "3";
    var availableCountryPolicy = optionProperty.Policies.OfType<AvailableSelectionsPolicy>().FirstOrDefault();
    countryProperty.Value = availableCountryPolicy?.List.FirstOrDefault(o => o.Name.Equals("CA")).Name;
    command = Proxy.DoCommand(container.DoAction(view));
    
4.  例えば、*項目#1*の他のアドレスプロパティを提供します。
    
    view = command.Models.OfType<EntityView>().FirstOrDefault(v => v.Name.Equals(view.Name));
    var stateProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("State"));
    var availableStatesPolicy = stateProperty.Policies.OfType<AvailableSelectionsPolicy>().FirstOrDefault();
    stateProperty.Value = availableStatesPolicy?.List.FirstOrDefault(o => o.Name.Equals("ON")).Name;
    view.Properties.FirstOrDefault(p => p.Name.Equals("AddressName")).Value = "home";
    view.Properties.FirstOrDefault(p => p.Name.Equals("FirstName")).Value = "john";
    view.Properties.FirstOrDefault(p => p.Name.Equals("LastName")).Value = "doe";
    view.Properties.FirstOrDefault(p => p.Name.Equals("Address1")).Value = "123 street A";
    view.Properties.FirstOrDefault(p => p.Name.Equals("City")).Value = "city";
    view.Properties.FirstOrDefault(p => p.Name.Equals("ZipPostalCode")).Value = "a1b2c3d";
    view.Properties.FirstOrDefault(p => p.Name.Equals("PhoneNumber")).Value = "123 123 1234";
    command = Proxy.DoCommand(container.DoAction(view));
    
5.  項目 *#1*のフルフィルメント方法(この場合は地上輸送用)を設定します:
    
    view = command.Models.OfType<EntityView>().FirstOrDefault(v => v.Name.Equals(view.Name));
    var methodProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("State"));
    var availableMethodsPolicy = methodProperty.Policies.OfType<AvailableSelectionsPolicy>().FirstOrDefault();
    methodProperty.Value = availableMethodsPolicy?.List.FirstOrDefault(o => o.DisplayName.Equals("Ground")).Name;
    command = Proxy.DoCommand(container.DoAction(view));
    
6.  *ラインアイテム#2*(この例では無形製品)のフルフィルメント情報を設定するには、ラインフルフィルメントオプションを選択してくださいDigital:
    
    EntityView view = Proxy.GetValue(query);
    var optionProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Option"));
    var availableOptionsPolicy = optionProperty.Policies.OfType<AvailableSelectionsPolicy>().FirstOrDefault();
    optionProperty.Value = availableOptionsPolicy?.List.FirstOrDefault(o => o.Name.Equals("Digital")).Name;
    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));
    
7.  メールアドレス(例:*[jan@doe.com](mailto:jan@doe.com)* )とメールの内容(例:*Happy birthday!)*を入力してください。
    
    view = command.Models.OfType<EntityView>().FirstOrDefault(v => v.Name.Equals(view.Name));
    view.Properties.FirstOrDefault(p => p.Name.Equals("EmailAddress")).Value = "jan@doe.com";
    view.Properties.FirstOrDefault(p => p.Name.Equals("EmailContent")).Value = "Happy birthday!";
    command = Proxy.DoCommand(container.DoAction(view));