Escolha um mecanismo de modelo apropriado

Em geral, o formato de qualquer modelo deve seguir a mesma estrutura do modelo padrão.

Mantendo esta regra geral em mente, há duas maneiras de customizar o modelo padrão, diferenciadas pela quantidade de dados que são retornados e como eles podem ser chamados:
  • Modelos estáticos
  • Modelos dinâmicos

Os modelos estáticos fornecem a capacidade de incluir novos elementos, mas não remove nenhum dos padrões. Um modelo estático é difundido, pois ele é selecionado por padrão por uma API sempre que a API é chamada.

Os modelos dinâmicos fornecem a capacidade de incluir novos elementos e remover qualquer um dos elementos padrão a partir do modelo padrão. Um modelo dinâmico é uma instância, pois ele é selecionado apenas para uma chamada de API específica, tal como quando configurado para fazer isso durante a extensibilidade da interface com o usuário.

Uma comparação das diferenças entre os dois tipos de mecanismos de modelo é resumida na tabela a seguir.


Tipos de Modelo Elementos XML Permitidos Comportamento
Modelo Estático

Elementos de modelo padrão não podem ser removidos.

Novos elementos podem ser incluídos.

Difundido. Selecionado por padrão por uma API.
Modelo Dinâmico

Elementos de modelo padrão podem ser removidos.

Novos elementos podem ser incluídos.

Instância. Selecionado para uma chamada de API específica, conforme configurado durante a extensibilidade da interface com o usuário.

Escolha quais desses mecanismos melhor atende às suas necessidades de negócios e adote-o.

Lembre-se de que, quando você define um modelo dinâmico, todos os valores possíveis são retornados. A fim de retornar a menor quantidade de dados para um elemento, quando estiver removendo elementos dos quais não precisa, será necessário incluir seu pai com pelo menos um de seus atributos.

Se você deixar um elemento em branco ou incluir atributos indesejados no elemento pai, todos os valores serão retornados, conforme ilustrado no exemplo a seguir de um modelo dinâmico removido inadequadamente.

Um modelo dinâmico mal removido

<!-- getOrderDetails Output XML --> 
<Order> 
   <OrderLines> 
     <!--1 or more order line--> 
       <OrderLine> 
          <Item CountryOfOrigin="" ItemDesc="" ItemID=""/> 
          <Schedules> 
             <Schedule Attr1 ...... /> 
          </Schedules> 
       </OrderLine> 
   </OrderLines> 
<Order>

Como o modelo dinâmico removido inadequadamente especifica todos os atributos OrderLine, bem como alguns atributos Item e Schedule, a API retornará valores semelhantes aos seguintes.

<OrderLine AllocationDate="03/28/2002" CarrierAccountNo="112233" 
CarrierServiceCode="Next Day Air" Createprogid="CustomTester"
Createts="03/28/2002" Createuserid="CustomTester" CustomerLinePONo="999"
CustomerPONo="111" DeliveryCode="AIR" DepartmentCode="Clothing"
ExtendedFlag="" ExternalReference1="" ExternalReference2="" 
ExternalReference3="" ExternalReference4="" ExternalReference5="" 
FreightTerms="Buyer" HoldFlag="N" HoldReasonCode="HoldReas" 
ImportLicenseExpDate="08/08/2002" ImportLicenseNo="225588" 
InternalReference1="" InternalReference2="" InternalReference3="" 
InternalReference4="" InternalReference5="" KitCode=""
LineClass="" LineSeqNo="1.1" LineType="Single" Lockid="1" MarkForKey=""
Modifyprogid="CustomTester" Modifyts="03/28/2002" 
Modifyuserid="CustomTester" OrderClass="NEW" 
OrderHeaderKey="200203281036245174" OrderLineKey="200203281036245175"
OrderedQty="5.00" OrigOrderLineKey="" OriginalOrderedQty="5.00"
OtherCharges="0.00" OtherChargesPerLine="0.00" OtherChargesPerUnit="0.00"
PackListType="Bill" PersonalizeCode="PersCode" PersonalizeFlag="" 
PickableFlag="Y" PricingDate="01/01/2500" PrimeLineNo="1" 
Purpose="Purpose" ReceivingNode="B1N1" ReqCancelDate="01/01/2500" 
ReqDeliveryDate="04/04/2002" ReqShipDate="03/30/2002"
ReservationID="" ReservationPool="" SCAC="UPS" ShipNode="E1N1" ShipToID=""
ShipToKey="" ShipTogetherNo="Y" SplitQty="0.00" SubLineNo="1" 
TotalDiscountAmount="0.00" TotalOtherCharges="0.00"> 
<Item CountryOfOrigin="" ItemDesc="" ItemID=""/> 
<Schedules> 
<Schedule ExpectedDeliveryDate="" ExpectedShipmentDate=""
TagNumber="" OrderHeaderKey="" OrderLineKey="" OrderLineScheduleKey=""
ScheduleNo="" ShipByDate="" Quantity=""  PromisedApptStartDate=""
PromisedApptEndDate=""/> 
</Schedules> 
</OrderLine> 
</OrderLines> 
</Order>

Um modelo de saída customizado removido cuidadosamente

Neste modelo de saída customizado removido cuidadosamente, o modelo dinâmico foi reduzido, tendo em mente as seguintes diretrizes:
  • A estrutura do modelo de saída customizado espelha a estrutura do modelo de saída padrão.
  • Elementos em excesso (referentes a kits, planejamentos, endereços, e assim por diante) são removidos imediatamente.
  • Elementos pai são preenchidos com um atributo a fim de eliminar o excesso de detalhes. Por exemplo, especificar o atributo OrderNo para o elemento Order suprime todos os outros atributos Order.
<!-- getOrderDetails Output XML --> 
<Order OrderNo=””> 
   <OrderLines>
		    <!--1 or more order line--> 
        <OrderLine PrimeLineNo=""> 
            <Item CountryOfOrigin="" ItemDesc="" ItemID=""/> 
     </OrderLine> 
    </OrderLines> 
</Order>

Como esse modelo de saída customizado removido cuidadosamente especifica apenas alguns atributos de Item e apenas um atributo para seu elemento pai, a API comogetOrderDetails() retorna apenas os seguintes valores:

<?xml version="1.0" encoding="UTF-8" ?> 
<Order OrderNo=Y00000765> 
   <OrderLines> 
      <OrderLine PrimeLineNo="1"> 
          <Item CountryOfOrigin="IN" Item Description" 
ItemDesc="Green Sari" ItemID="GNSARI5LT" /> 
       </OrderLine> 
       <OrderLine PrimeLineNo="3"> 
          <Item CountryOfOrigin="CA" ItemDesc="Pink Scarf" 
ItemID="PKSCARF4LT" /> 
       </OrderLine> 
    </OrderLines> 
</Order>

Este método de remoção dos modelos melhora o desempenho, pois o acesso ao banco de dados para planejamentos de pedido e outros elementos indesejados foi evitado.