Recuperación de Lista de Solicitudes de Descarga Masiva Registradas Previamente

Recuperación de Lista de Solicitudes de Descarga Masiva Registradas Previamente

Esta transacción permite recuperar la lista (paginada y que cumplan criterios de filtrado establecidos, así como un ordenamiento indicado), con los metadatos asociados a Solicitudes de Descarga Masiva registradas previamente.

La respuesta es una mezcla de una lista (un registro por cada solicitud que cumple con los criterios de filtrado y que pertenecen a la página indicada), así como información de dicha lista (tamaño de página, cantidad de líneas totales y cantidad de páginas totales), y se entregará en dos tipos de formato diferente, en dependencia de lo especificado en los parámetros de entrada.

OBTENER_LISTA_SOLICITUDES_DM_SAT

Los parámetros de la solicitud se especificarán todos en Data1 (Data2 y Data3 vacíos).
Los parámetros serán indicados en formato string (el ya conocido NamedStringDictionary) y codificado Base64.

Ejemplo de valor para el parámetro Data1 (se muestra en varias líneas y plano para que se entienda mejor, debe especificarse en una sola y codificado Base64):
  1. <Dictionary name="Pars">
      <Entry k="Page" v="1"/>
      <Entry k="PageSize" v="5"/>
      <Entry k="ResponseFormat" v="XML"/>
      <Entry k="Oper" v="BOTH"/>
      <Entry k="Order" v="TipoSolicitud ASC, FechaRegistro DESC"/>
      <Entry k="Filters" v="PEZpbHRlcnM+PEZpbHRlciBOYW1lPSJTZXJ2aWNpbyIgT3Blcj0iPS
    IgVmFsdWUxPSJSRVRFTkNJT05FUyIgVmFsdWUyID0iIiAvPjxGaWx0ZXIgTmFtZT0iVGlwb1NvbGlj
    aXR1ZCIgT3Blcj0iPSIgVmFsdWUxPSJNZXRhZGF0YSIgVmFsdWUyID0iIiAvPjwvRmlsdGVycz4="/>
    </Dictionary>
Definición de etiquetas Key:
Page: Indica la página que se quiere recuperar; obligatorio si Oper tiene valor LINES o BOTH.

PageSize: Indica la cantidad de líneas por página; obligatorio si Oper tiene valor LINES o BOTH.

ResponseFormat: Indica el formato que se desea como respuesta (valores posibles: JSON y XML); obligatorio.

Oper: Indica el tipo de operación que se realizará (valores posibles: LINES, COUNT y BOTH); opcional, en caso de no especificarse se asume valor BOTH.

Order: Indica el ordenamiento que se desea en el listado. El formato es tipo BD (MySql, MsSql, PlSql, etc.). Los campos que se pueden utilizar (de manera única o combinados, separados por coma) son: Servicio, TipoSolicitud, FechaInicial, FechaFinal, EstadoSolicitud y FechaRegistro; cada campo utilizado puede tener asociado el modificador ASC o DESC. Parámetro opcional, en caso de no especificarse se asume FechaRegistro DESC (los mas recientes primero).

Filters: Indica los criterios de filtrado que tienen que cumplir los registros recuperados (se especifica codificado Base64); opcional. La mejor forma de explicar el formato de este parámetro es con un ejemplo.

Como se había aclarado previamente, el valor de la propiedad Filters se especifica codificado en Base64.El valor de la propiedad Filters del ejemplo anterior, decodificado, es este (se muestra en varias líneas, para que se entienda mejor):
  1. <Filters>
      <Filter Name="Servicio" Oper="=" Value1="RETENCIONES" Value2=""/>
      <Filter Name="TipoSolicitud" Oper="=" Value1="Metadata" Value2=""/>
    </Filters>

Pueden existir 6 criterios de filtrado; a continuación los enumero así como el valor a especificar en el atributo Name para cada uno de ellos:

Servicio: Especificar el valor Servicio en el atributo Name (no es case sensitive).

Tipo de Solicitud: Especificar el valor TipoSolicitud en el atributo Name (no es case sensitive).

Fecha Inicial: Especificar el valor FechaInicial en el atributo Name (no es case sensitive).

Fecha Final: Especificar el valor FechaFinal en el atributo Name (no es case sensitive).

Fecha de Registro en MYSuite: Especificar el valor FechaRegistro en el atributo Name (no es case sensitive).

Estado de la Solicitud: Especificar el valor EstadoSolicitud en el atributo Name (no es case sensitive).

El significado de cada criterio (excepto FechaRegistro que corresponde al campo EnrolledTimeStamp), son los mismos que los ya explicados en artículo anterior (para los campos de la respuesta entregada por la transacción OBTENER_SOLICITUD_DM_SAT en el NewDataSet Info).

Los valores posibles para el atributo Oper son (no es case sensitive):< =, <   >, > =, =, BETWEEN y LIKE; en formato xml los caracteres < y > son especiales y deben ser sustituidos (< por &lt;  y > por &gt;).

Evidentemente todos los operadores no pueden ser utilizados en cualquier filtro; por ejemplo, LIKE sólo tiene sentido si el campo que se está filtrando es de tipo cadena de caracteres.

Value1 es el valor por el cual se va a comparar, con el operador Oper, el campo especificado en Name; en el caso de Oper con valor LIKE los % deben ser especificados.

Value2 siempre es vacío (pero obligatorio) mientras el valor de Oper no sea < >; en este caso se necesita un segundo valor de comparación tal y como está en el ejemplo para el criterio de filtrado por Fecha de Alta.

Los valores de tipo fecha especificados en Value1 y Value2 tienen que especificarse en formato yyyy-mm-dd (año-mes-día).

SOLICITUD

A continuación se muestra la manera en que debe realizarse la solicitud:
  1. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ws="http://www.fact.com.mx/schema/ws">
       <soap:Header/>
       <soap:Body>
          <ws:RequestTransaction>       
             <ws:Requestor>0c320b03-d4f1-47bc-9fb4-77995f9bf33e</ws:Requestor>       
             <ws:Transaction>OBTENER_LISTA_SOLICITUDES_DM_SAT</ws:Transaction>       
             <ws:Country>MX</ws:Country>       
             <ws:Entity>JES900109Q90</ws:Entity>       
             <ws:User>0c320b03-d4f1-47bc-9fb4-77995f9bf33e</ws:User>       
             <ws:UserName>Jan_Test</ws:UserName>       
             <ws:Data1>XML Dictionary en Base64</ws:Data1>       
             <ws:Data2></ws:Data2>       
             <ws:Data3></ws:Data3>
          </ws:RequestTransaction>
       </soap:Body>
    </soap:Envelope>

RESPUESTA
  1. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <soap:Body>
          <RequestTransactionResponse xmlns="http://www.fact.com.mx/schema/ws">
             <RequestTransactionResult>
                <Request>
                   <Requestor>00000000-0000-0000-0000-000000000000</Requestor>
                   <RequestorActive>true</RequestorActive>
                   <Transaction>OBTENER_LISTA_SOLICITUDES_DM_SAT</Transaction>
                   <Country>MX</Country>
                   <Entity>JES900109Q90</Entity>
                   <User>00000000-0000-0000-0000-000000000000</User>
                   <UserName>Jan_Test</UserName>
                   <Id>687d46e5-835a-40c5-8f30-213a02da3e33</Id>
                   <TimeStamp>2020-05-19T15:43:09.0702889-05:00</TimeStamp>
                </Request>
                <Response>
                   <Result>true</Result>
                   <TimeStamp>2020-05-19T15:43:10.8202914-05:00</TimeStamp>
                   <LastResult/>
                   <Code>1</Code>
                   <Description/>
                   <Hint/>
                   <Data>1251 687d46e5-835a-40c5-8f30-213a02da3e33</Data>
                   <Processor>TEST-BACK02</Processor>
                </Response>
                <ResponseData>
                   <ResponseData1>XML de respuesta codificado en Base64</ResponseData1>
                   <ResponseData2/>
                   <ResponseData3/>
                </ResponseData>
             </RequestTransactionResult>
          </RequestTransactionResponse>
       </soap:Body>
    </soap:Envelope>
El valor devuelto en ResponseData1 puede tener dos formatos diferentes (en dependencia de lo especificado en la propiedad responseFormat).

Ejemplo de valor devuelto en ResponseData1, formato XML (aunque se muestra plano, y en varias líneas, el valor de ResponseData1 viene codificado en Base64):
  1. <?xml version="1.0" encoding="utf-8"?>
    <ListRetrieverResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <PageSize>5</PageSize>
      <LinesCount>1</LinesCount>
      <PagesCount>1</PagesCount>
      <Lines>
        <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
          <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
            <xs:complexType>
              <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="Table1">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="Id" type="xs:int" minOccurs="0"/>
                      <xs:element name="TaxID" type="xs:string" minOccurs="0"/>
                      <xs:element name="Servicio" type="xs:string" minOccurs="0"/>
                      <xs:element name="FechaInicial" type="xs:dateTime" minOccurs="0"/>
                      <xs:element name="FechaFinal" type="xs:dateTime" minOccurs="0"/>
                      <xs:element name="TipoSolicitud" type="xs:string" minOccurs="0"/>
                      <xs:element name="TipoTaxID" type="xs:string" minOccurs="0"/>
                      <xs:element name="Identificador" type="xs:string" minOccurs="0"/>
                      <xs:element name="EnrolledTimeStamp" type="xs:dateTime" minOccurs="0"/>
                      <xs:element name="EstadoSolicitud" type="xs:int" minOccurs="0"/>
                      <xs:element name="CodigoEstadoSolicitud" type="xs:string" minOccurs="0"/>
                      <xs:element name="NumeroCFDIs" type="xs:int" minOccurs="0"/>
                      <xs:element name="CodEstatus" type="xs:string" minOccurs="0"/>
                      <xs:element name="Mensaje" type="xs:string" minOccurs="0"/>
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
              </xs:choice>
            </xs:complexType>
          </xs:element>
        </xs:schema>
        <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
          <NewDataSet>
            <Table1 diffgr:id="Table11" msdata:rowOrder="0">
              <Id>10</Id>
              <TaxID>JES900109Q90</TaxID>
              <Servicio>RETENCIONES</Servicio>
              <FechaInicial>2019-03-01T00:00:00-06:00</FechaInicial>
              <FechaFinal>2019-03-05T23:59:59-06:00</FechaFinal>
              <TipoSolicitud>Metadata</TipoSolicitud>
              <TipoTaxID>EMISOR</TipoTaxID>
              <Identificador>364c1262-05f1-45d6-91e9-76ca89403470</Identificador>
              <EnrolledTimeStamp>2019-05-01T08:25:00-05:00</EnrolledTimeStamp>
              <EstadoSolicitud>5</EstadoSolicitud>
              <CodigoEstadoSolicitud>5004</CodigoEstadoSolicitud>
              <NumeroCFDIs>0</NumeroCFDIs>
              <CodEstatus>5000</CodEstatus>
              <Mensaje>Solicitud Aceptada</Mensaje>
            </Table1>
          </NewDataSet>
        </diffgr:diffgram>
      </Lines>
    </ListRetrieverResult>

A continuación se describen las etiquetas que vienen en ResponseData1:

LinesCount y PagesCount solo se devuelven si el parámetro Oper tuvo valor COUNT o BOTH.

Lines solo se devuelven si el parámetro Oper tuvo valor LINES o BOTH.

PageSize indica la cantidad de registros por páginas que se tuvo en cuenta para el cálculo de PagesCount y también para el tamaño de Lines.

LinesCount indica la cantidad total de registros que cumplieron con los criterios de filtrado especificados.

PagesCount indica la cantidad total de páginas de tamaño PageSize para los registros que cumplieron con los criterios de filtrado especificados.

Lines NewDataSet con los metadatos de cada registro que cumplió con los criterios de filtrado especificados y que pertenece a la página especificada en el parámetro Page de acuerdo con el criterio de ordenamiento especificado en el parámetro Order. En el ejemplo hubo un único registro que cumplió con los criterios de filtrado pero pudieran devolverse varios, máximo lo informado en PageSize. La explicación de la información presente en este NewDataSet es la misma que ya se brindó en artículo anterior (para los campos de la respuesta entregada por la transacción OBTENER_SOLICITUD_DM_SAT en el NewDataSet Info).

Si el parámetro ResponseFormat hubiera tenido valor JSON, el valor devuelto en ResponseData1 para la misma solicitud previa hubiera sido este (aunque se muestra plano, y en varias líneas, recuerda siempre que el valor de ResponseData1 viene codificado Base64):
  1. {
      "PageSize": 5,
      "LinesCount": 1,
      "PagesCount": 1,
      "Lines": "[{
            \"Id\":10,
            \"TaxID\":\"JES900109Q90\",
            \"Servicio\":\"RETENCIONES\",
            \"FechaInicial\":\"\\/Date(1551420000000)\\/\",
            \"FechaFinal\":\"\\/Date(1551851999000)\\/\",
            \"TipoSolicitud\":\"Metadata\",
            \"TipoTaxID\":\"EMISOR\",
            \"Identificador\":\"364c1262-05f1-45d6-91e9-76ca89403470\",
            \"EnrolledTimeStamp\":\"\\/Date(1556717100000)\\/\",
            \"EstadoSolicitud\":5,
            \"CodigoEstadoSolicitud\":\"5004\",
            \"NumeroCFDIs\":0,
            \"CodEstatus\":\"5000\",
            \"Mensaje\":\"Solicitud Aceptada\"
             }]"
    }

Noten que la información devuelto es la misma que antes; solo en un formato diferente.

Notas para tener en cuenta:

·         A pesar de que existe un parámetro de entrada PageSize que indica la cantidad de registros por página que se desean recuperar la transacción devuelve la información PageSize; esto porque existe un máximo de 500 registros que se pueden devolver, si el valor indicado en el parámetro PageSize es mayor que 500, entonces este se fija en dicho valor, por eso la respuesta aclara con qué tamaño de página fue recuperada toda la información. Siempre que el parámetro PageSize sea menor o igual a 500, lo devuelto en PageSize tendrá el mismo valor.

            ·         No se permite recuperar solicitudes que pertenecen a un RFC diferente al que realiza la transacción; en otras palabras, todas las solicitudes devueltas en el NewDataSet Lines pertenecen al RFC que está invocando a la transacción.