Este artigo é uma atualização de um blog anterior do meu colega @BruceHarold publicado há algum tempo. Embora o fluxo de trabalho e as fontes de dados sejam os mesmos, esta solução elimina qualquer código previamente adicionado, devido ao poder do transformador do Workbench chamado HTTPCaller e da ArcGIS REST API<\/SPAN>.<\/P>Com algumas mudanças na solução original, construiremos uma solução de integração web a web com ArcGIS Online.<\/P>Também destacarei algumas melhorias do Data Interoperability desde que este blog anterior foi escrito há cinco anos. Com este blog vem uma versão mais recente do exemplo funcional que você pode baixar no link abaixo.<\/P>Você Consegue Perceber a Diferença?<\/STRONG><\/P>Substituímos o destino de file geodatabase para ArcGIS Online. Usando o recurso Compare Workspace você pode ver as mudanças visuais na tela para ajudar a modificar um workspace existente. O workspace Somente Leitura<\/STRONG> à direita é o original e o novo workspace Editável<\/STRONG> é o novo. Na janela Navegador<\/STRONG> Editável<\/STRONG>, objetos em ciano são novos objetos, amarelos são modificados. <\/P>O destino da classe de feição Observations em magenta no workspace original agora foi alterado para uma camada de feição AGOL em azul no novo.<\/P>Adicionamos dois transformadores e removemos quaisquer scripts Python que faziam parte do exemplo original.<\/P>Um FeatureMerger foi adicionado para substituir a saída da Match table e esse tipo de feição Match Table foi substituído pelo HTTPCaller.<\/P>O código python que adicionava os anexos agora foi substituído por uma configuração do HTTPCaller chamando o endpoint AddAttachment REST do serviço de feição do ArcGIS Server.<\/P>
Compare Workspaces<\/span><\/span><\/P>Comece com uma Conexão Web<\/STRONG><\/P>Você precisa fazer isso apenas uma vez no seu menu Tools ---> FME Options<\/STRONG>. Para referência sobre como construir uma conexão web, por favor veja este artigo. Este artigo mostra como construir uma conexão web para ArcGIS Enterprise, entretanto, os passos são os mesmos para ArcGIS Online. Uma vez que você tenha a conexão web, vamos ao que interessa.<\/P>Abandone o Código e Aprenda a Configurar o HTTPCaller para Adicionar Anexos<\/STRONG><\/P>Sim, abandone os scripts python. Para reutilizar o exemplo para funcionar com sua própria instância AGOL, você precisa entender como configurar o HTTPCaller, mudando aqueles parâmetros marcados pelas setas vermelhas, mostrados abaixo.<\/P>
HTTPCaller configuration for AddAttachment end point<\/span><\/span>O melhor lugar para aprender a configurar é lendo a página de ajuda da AddAttachment API. Sim, leia a Descrição ou como dizem "leia as letras miúdas". Esteja ciente dos limites, tamanho, formatos e outras informações pertinentes. Só porque é sem código não significa que seja plug and play.<\/P>Aqui está a URL da requisição: https://<root>/<serviceName>/FeatureServer/<layerId>/<featureId>/addAttachment<\/P>Abaixo está o que está configurado na URL da Requisição para este exemplo baixado:<\/P> <\/P>https://services7.arcgis.com/eeZcUziwi5hzGEGs/ArcGIS/rest/services/r2r/FeatureServer/0/@Value(ID)/AddAttachment<\/code><\/pre> <\/P>O parâmetro <featureid><\/STRONG> @Value(id)<\/EM> é dinâmico mas o resto está codificado fixamente. A questão é, onde você obtém a URL <root><\/STRONG>?<\/P>O truque é ir até a página do item da feature AGOL, clicar na camada de feição Observations em Layers para abrir a página do item da camada de feição Observations e rolar para baixo até ver a seção URL no painel direito abaixo de Details.<\/P>
Right pane of the AGOL feature layer item<\/span><\/span>Clique no botão View para abrir o pop up do endpoint rest do serviço de feição. <\/P>
Click View to Open the feature Server feature service pop up<\/span><\/span><\/P>Quando a página ArcGIS REST Services Directory abrir, role até o topo e no canto superior esquerdo da página, clique com o botão direito na camada Observations e clique em Copy Link Address, se você usar Chrome como navegador.<\/P>
Copying the root URL plus token from the feature service page<\/span><\/span><\/P>Isto lhe dará a URL <root><\/STRONG> mais o token para substituir o que está configurado no HTTPCaller do exemplo. Como você vai construir uma conexão web, remova o token desta URL copiada. Cole esta URL na URL da Requisição do transformador.<\/P>Para completar a configuração do HTTPCaller, há um parâmetro oculto na seção Multipart Upload do HTTPCaller, mostrado abaixo. Isto não está nas letras miúdas da API, mas é brevemente mencionado na página de ajuda do HTTPCaller.<\/P>
Multipart form required parameter values<\/span><\/span><\/P>No linha attachment<\/STRONG>, onde Upload Type<\/STRONG> é File Upload, você precisa configurar o mime-type do anexo que é exibido quando você clica no menu de 3 pontos da célula Value<\/STRONG> da linha. Este parâmetro oculto tem padrão como application/octet-stream e se não corresponder ao arquivo causará falha no AddAttachment.<\/P>
Dynamic mime-type attribute<\/span><\/span><\/P>Note que o valor mime-type<\/STRONG> que configurei para o parâmetro MIME-Type<\/STRONG> é na verdade um atributo dinâmico criado no fluxo de dados. Isto é útil quando você tem múltiplos tipos de anexos (ex.: pdf, jpg, png e outros) para carregar. Então onde este atributo é criado? Procure por ele no AttributeManager antes do HTTPCaller. Eu usei o path_extension<\/STRONG> e renomeei para mime-type <\/STRONG>e atribuí um valor condicional baseado na extensão.<\/P>
Criando o atributo mime-type para permitir o upload de formatos específicos suportados<\/span><\/span><\/P>Certifique-se de que você sabe quais extensões está enviando e seus mime-types. Para uma lista dos tipos de arquivo suportados no AGOL, por favor confira este link<\/A>.<\/P>Eu preciso atualizar meus Upgradeable Transformers?<\/STRONG><\/P>Outro recurso novo disponível é o recurso Upgrade All Transformers. A versão anterior desse recurso era para atualizar um transformer por vez. Note no painel Navigator abaixo que há 21 transformers que precisam ser atualizados. Com um clique do botão e passando por alguns prompts, seu workspace é atualizado. Você também pode optar por fazer Backup do seu workspace ou não.<\/P>
Atualize os transformers no seu canvass<\/span><\/span><\/P>Para executar esta nova solução com sucesso, não é necessário atualizar esses transformers, mas sempre é uma boa prática fazê-lo. O exemplo final abaixo terá todos esses transformers atualizados para a versão mais recente e melhor.<\/P>Executando o workspace<\/STRONG><\/P>A solução foi intencionalmente projetada para executar dois bookmarks separadamente. Antes de executar qualquer bookmark, certifique-se de habilitar o cache.<\/P>O Bookmark One cria o serviço de feição Observations e grava suas feições. Você executa um bookmark clicando e pairando no topo do bookmark até que pequenos ícones apareçam na parte superior. Clique no botão Run Just Contained play.<\/P>
Bookmark One - Gravar feições de Observação<\/span><\/span><\/P> <\/P>Antes de executarmos o Bookmark Two, precisamos voltar à camada de feição recém-criada no AGOL e clicar no controle deslizante Enable Attachment para definir como True. Você precisa fazer isso porque o parâmetro Enable attachment da camada de feição Observations precisa estar definido como True antes de executarmos o Bookmark Two. Como a ferramenta cria o serviço de feição no Bookmark One, Enable attachment será definido como False por padrão. <\/P>
Habilitar anexos<\/span><\/span><\/P> Com os anexos habilitados, podemos executar o Bookmark two para adicionar anexos relacionados à camada de feição Observations.<\/SPAN><\/P> <\/P>
Bookmark two - Enviar anexos<\/span><\/span><\/P> <\/P>Note que na próxima vez que você executar a solução e o Feature Type Handling<\/STRONG> estiver definido como Truncate Existing,<\/EM> Enable Attachment ainda estará True.<\/P>
Feature Type Handling definido como Truncate Existing para execuções futuras<\/span><\/span><\/P> <\/P>Na solução original, Enable Attachment é executado com o script Python shutdown. Você pode modificar esta solução para incluir a automação do Enable Attachment adicionando o endpoint UpdateDefinition rest, mas eu gostaria de manter esta solução simples e deliberada. <\/P>Deixo a melhoria para você. Se agendamento e uma única execução se encaixam no seu fluxo de trabalho, provavelmente você precisará da melhoria. <\/P>Dica: Se você quiser fazer a automação completa, a imagem abaixo será um começo útil.<\/P>
Adicionando Enable Attachment à sua solução<\/span><\/span><\/P> <\/SPAN><\/BLOCKQUOTE>Visualize seu trabalho<\/SPAN><\strong>
Meu app preferido para visualizar os resultados é o template Instant App Attachment Viewer. Como mágica, todos os meus anexos aparecem em um mapa interativo e visualizador de fotos.<\span>

Os resultados da solução mostrados usando o template Instant App Attachment Viewer
Palavra final
Antes de começar a vasculhar seus compartilhamentos de rede e discos rígidos em busca de fotos, observe que anexos têm custos de armazenamento no AGOL e eu estaria negligente se não informasse sobre esses custos ao fazer isso. Aqui está o guia para
entender os créditos do AGOL.
Embora existam padrões estabelecidos para automação e integração de dados com anexos, toda solução precisa considerar vários fatores. Eu detalhei alguns desses fatores neste artigo. Para geodatabases, a solução original com o script Python Shutdown ainda é a melhor abordagem. A solução AGOL é mais simples e funciona bem para visualizar dados com anexos. Então escolha seu tempero e escolha bem.
É isso, você pode começar a vasculhar seus drives e carregar seus anexos para o AGOL.