Forum Discussion
Error AccessForbinddenException para actualizar datos
Hola @emerson89 ,
¿Lo estás paginando? Intente ejecutarlo con 1 o 2 páginas, sólo para comprobar si recibe este error.
Hola @camargos88 ,
Sí, Mi consulta listaPedidosAquiles es paginate, pero, solo, este trabajo está bien. Lo probé dividiendo la cantidad de página por la mitad, y funcionó bien. Lo probé en 4 páginas también, por ejemplo, y todo funciona normalmente. El problema se produce cuando intento enumerar todos los datos. ¿Alguna idea?
Gracias
- camargos886 years agoCommunity Champion
Sospecho que el código intenta obtener más páginas que la cantidad disponible.
¿Cómo se define la cantidad de páginas?
- emerson896 years agoHelper I
Hola @camargos88 ,
Realmente, su observación tiene sentido, sin embargo, cuando ejecuto la consulta que utilizo para separar los números (solicitudes) que se utilizarán como parámetro para la segunda consulta, funciona perfectamente.
Aquí está mi primera consulta:
let ufnCallAPI = (nPage) => let result = Json.Document(Web.Contents("https://api.vhsys.com/", [RelativePath="v2/pedidos?offset=" & Number.ToText(nPage) & "&limit=250&status=Atendido", Headers=[#"access-token"="OCKNYbAMaDgLBZBSQPCOGPWOXGSbdO", #"secret-access-token"="xxxxxxxxx"]])) in result, tmpResult = ufnCallAPI(1), auxTotal1 = Record.ToTable(tmpResult), Value = auxTotal1{2}[Value], auxTotal2 = Value[total], totalItems = auxTotal2, pageRange = {0..Number.RoundUp(totalItems / 250)-1}, aux = List.Transform(pageRange, each ufnCallAPI(_*250)), aux2 = Table.FromList(aux, Splitter.SplitByNothing(), null, null, ExtraValues.Error), aux3 = Table.ExpandRecordColumn(aux2, "Column1", {"code", "status", "paging", "data"}, {"Column1.code", "Column1.status", "Column1.paging", "Column1.data"}), aux4 = Table.ExpandListColumn(aux3, "Column1.data"), aux5 = Table.RemoveColumns(aux4,{"Column1.code", "Column1.status", "Column1.paging"}), aux6 = Table.ExpandRecordColumn(aux5, "Column1.data", {"id_ped", "id_pedido", "id_cliente", "nome_cliente", "id_local_retirada", "id_local_cobranca", "vendedor_pedido", "vendedor_pedido_id", "listapreco_produtos", "valor_total_produtos", "desconto_pedido", "desconto_pedido_porc", "peso_total_nota", "peso_total_nota_liq", "frete_pedido", "valor_total_nota", "valor_baseICMS", "valor_ICMS", "valor_baseST", "valor_ST", "valor_IPI", "condicao_pagamento_id", "condicao_pagamento", "frete_por_pedido", "transportadora_pedido", "id_transportadora", "data_pedido", "prazo_entrega", "referencia_pedido", "obs_pedido", "obs_interno_pedido", "status_pedido", "contas_pedido", "comissao_pedido", "estoque_pedido", "ordemc_emitido", "data_cad_pedido", "data_mod_pedido", "id_aplicativo", "id_pedido_aplicativo", "lixeira"}, {"id_ped", "id_pedido", "id_cliente", "nome_cliente", "id_local_retirada", "id_local_cobranca", "vendedor_pedido", "vendedor_pedido_id", "listapreco_produtos", "valor_total_produtos", "desconto_pedido", "desconto_pedido_porc", "peso_total_nota", "peso_total_nota_liq", "frete_pedido", "valor_total_nota", "valor_baseICMS", "valor_ICMS", "valor_baseST", "valor_ST", "valor_IPI", "condicao_pagamento_id", "condicao_pagamento", "frete_por_pedido", "transportadora_pedido", "id_transportadora", "data_pedido", "prazo_entrega", "referencia_pedido", "obs_pedido", "obs_interno_pedido", "status_pedido", "contas_pedido", "comissao_pedido", "estoque_pedido", "ordemc_emitido", "data_cad_pedido", "data_mod_pedido", "id_aplicativo", "id_pedido_aplicativo", "lixeira"}), listPedidos = aux6[id_ped] in listPedidosEste código devuelve una lista para mí, por ejemplo:
Lista
1
2
3
48
56
88
89
100
Los números anteriores son números que paso como parámetro en la consulta siguiente llamando a la consulta 1 (listaPedidos_Aquiles):
let ufnCallAPI = (numPedido) => let result = Json.Document(Web.Contents("https://api.vhsys.com/", [RelativePath="v2/pedidos/" & Number.ToText(numPedido) & "/produtos", Headers=[#"access-token"="OCKNYbAMaDgLBZBSQPCOGPWOXGSbdO", #"secret-access-token"="xxxxxxxx"]])) in result, pageRange = listaPedidos_Aquiles, pages = List.Transform(pageRange, each ufnCallAPI(_)), pages2 = Table.FromList(pages, Splitter.SplitByNothing(), null, null, ExtraValues.Error), pages3 = Table.ExpandRecordColumn(pages2, "Column1", {"code", "status", "data"}, {"code", "status", "data"}), pages4 = Table.ExpandListColumn(pages3, "data"), pages5 = Table.RemoveColumns(pages4,{"code", "status"}), #"data Expandido" = Table.ExpandRecordColumn(pages5, "data", {"id_ped_produto", "id_pedido", "id_produto", "desc_produto", "qtde_produto", "desconto_produto", "ipi_produto", "icms_produto", "valor_unit_produto", "valor_custo_produto", "valor_total_produto", "valor_desconto", "peso_produto", "peso_liq_produto", "info_adicional", "xPed_produto", "nItem_produto"}, {"id_ped_produto", "id_pedido", "id_produto", "desc_produto", "qtde_produto", "desconto_produto", "ipi_produto", "icms_produto", "valor_unit_produto", "valor_custo_produto", "valor_total_produto", "valor_desconto", "peso_produto", "peso_liq_produto", "info_adicional", "xPed_produto", "nItem_produto"}), #"Personalização Adicionada" = Table.AddColumn(#"data Expandido", "Empresa", each "Aquiles") in #"Personalização Adicionada"Con los códigos de pedido enviados por parámetros, la API me devuelve la lista de productos para esos pedidos.
Cuando pongo a prueba con pocos datos, todo funciona. Si pruefio con todo el contenido (alrededor de 30 mil líneas), el sistema aparentemente comienza a hacer la operación, veo en el mensaje que todo se está generando correctamente, pero al final, obtengo el mensaje de error.
En realidad puede haber más elementos que devolver, que páginas, pero en este caso, no puedo encontrar el error, porque en esta consulta2, no paso el parámetro de paginación como envío solicitud por solicitud (número), diferente de la consulta 1, que devuelvo una cantidad de elementos por página.
Muchas gracias.