String conteudoArquivoTxt = 'Segue a relação de Contas: \r\n';
List<Account> listaDeContas = [SELECT id, name, website FROM Account Limit 10];
for (Account conta : listaDeContas){
conteudoArquivoTxt += 'Nome: ' + conta.name + ' | Website: ' + conta.Website + '\r\n';
}
FeedItem post = new FeedItem();
post.ParentId = UserInfo.getUserId();
post.Body = 'Lista de Contas. Favor conferir!';
post.Type = 'ContentPost';
post.ContentData = Blob.valueOf(conteudoArquivoTxt);
post.ContentFileName = 'RelacaoContas.txt';
insert post;
A primeira coisa que é importante ressaltar nesse código é: Você não conseguirá rodá-lo na versão de API 36.0 ou superior. Esse código é válido até a versão 35.0. Isto é, se tentar no console do desenvolvedor, na parte de "Open Execute Anonymous Window", ele não funcionará, pois este usa a API mais recente. Então, para inciar os testes, use esse código em uma acionador (trigger) ou classe. No entando, quando for salvar esse código em uma classe ou trigger, altere a API de execução da trigger ou classe para 35 ou inferior:
Veja que, na classe ou trigger, basta acessar a guia Version Settings. E na API do Salesforce, marcar a versão 35 ou inferior.
Bem, agora que nosso código já funciona, vamos passar alguns itens importantes do código:
String conteudoArquivoTxt = 'Segue a relação de Contas: \r\n';
List<Account> listaDeContas = [SELECT id, name, website FROM Account Limit 10];
for (Account conta : listaDeContas){
conteudoArquivoTxt += 'Nome: ' + conta.name + ' | Website: ' + conta.Website + '\r\n';
}
Inicialmente eu salvo na variável "conteudoArquivoTxt" o conteúdo que desejo exibir no meu arquivo TXT que será salvo junto com a postagem no Chatter. Posteriormente coloco mais conteúdo nessa variável, iterando em uma lista de contas.
Em seguida, instancio um objeto do tipo "FeedItem", que será responsável pela postagem no Chatter:
FeedItem post = new FeedItem();
Logo após, através da propriedade "ParentId", eu digo aonde irá ser publicado a postagem. Nesse caso, estou indicando que será publicada na linha do tempo do usuário que está executando o código:
post.ParentId = UserInfo.getUserId();
Nas propriedade Body e Type, eu informo o conteúdo da postagem e o tipo de conteúdo, respectivamente. No caso do Type, há uma lista de opções para se usar. Usamos o ContentPost, pois significa que estamos postando texto com um arquivo anexo.
post.Body = 'Lista de Contas. Favor conferir!';
post.Type = 'ContentPost';
Para conhecer os outros tipos (Type) de conteúdo disponíveis para esse campo, veja a documentação oficial do Salesforce, relacionado ao FeedItem:
https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_feeditem.htm
Nos campos ContentData e ContentFileName, eu informo o corpo do arquivo texto que será anexado e o nome do arquivo txt, respectivamente. Repare que foi necessário converter a String da minha variável conteudoArquivoTxt para o tipo Blob.
post.ContentData = Blob.valueOf(conteudoArquivoTxt);
post.ContentFileName = 'RelacaoContas.txt';
E para concluir o código, dou o Insert no objeto post (tipo FeedItem) para realizar a postagem no Chatter, de fato:
insert post;
Veja o resultado da postagem no Chatter:
2 comentários:
Bom texto, mas como isso seria útil daqui a alguns meses/anos, quando não for possível selecionar a API 35 para ser utilizada? Existiria outra alternativa?
Hoje estamos na versão 38 da API. São lançadas 3 versões por ano. Ainda está disponível, no SFDC, desde a versão 10 da API. Isto é, creio que esse código não ficará obsoleto por um bom tempo.
Porém há uma outra forma de postar no Chatter com as novas API, mas que é um pouco mais complicada. Mas isso seria o assunto pra um outros post ;)
Postar um comentário