FAQ's

1. É possível criar uma entidade Master-detail-detail-detail?

A Framework Elevation apenas permite modelar entidade de 3 níveis.

2. Que formas existem para aceder a dados detail-detail?

Apenas existem duas formas de aceder a dados detail-detail: link ou link no menu de contexto, uma vez que, desta forma, os dados apenas são carregados a pedido e evita-se o carregamento da entidade toda. Além disso, estas também são as soluções a nível de design mais ‘user friendly’ encontradas.

3. Quando é selecionado um campo sem stop field, e é pressionado “Enter” qual o campo que fica com o focus?

O mesmo campo. O focus não transita para nenhum campo.

4. Tenho modelada uma operação Custom para a qual quero que seja verificada autorização. Posso fazê-lo?

Sim, mas como no caso de uma CustomOperations, o controller MVC não é gerado, caso a operação não esteja marcada como Unrestricted, cabe ao developer colocar o atributo RestrictedView (como id respetivo) nas actions que pretender no seu Custom Controller.

5. Se tenho dois produtos sobre os mesmo módulos posso ter um produto com todas as autorizações e outro que para uma determinada entidade só permita editar?

Sim, mas para isso o módulo que disponibiliza as listas dessa entidade tem que conter duas listas distintas uma com operações de create e edit e outra apenas com operação de edit. Resta depois incluir a lista pretendida no produto desejado.

6. É possível definir uma entidade que não seja company-dependent e tenha atributos cujo valor seja diferente para cada empresa?

Não. Esses atributos variáveis devem ser colocados numa entidade detalhe da entidade principal e esse detalhe deve ser company-dependent.

7. É possível definir uma entidade que não seja company-dependent e depois permitir que o utilizador indique em que empresa cada instância da entidade pode ser utilizada?

Não. Este cenário não é suportado.

8. Como é inicializada a empresa para entidades company-dependent?

A inicialização é efetuada tendo em consideração 4 fatores pela ordem de relevância que abaixo de apresenta. 1. O nº de empresas existentes na organização 2. As permissões do utilizador em questão 3. A existência da definição de uma empresa por omissão para o utilizador atual. 4. A existência da última empresa selecionada pelo utilizador no contexto da sessão atual. Em concreto, no momento de criação da instância da entidade o algoritmo seguido para tentar inicializar o campo empresa é o que se descreve: - Caso a organização tenha apenas uma empresa, a empresa será inicializada para a única empresa disponível na lista de empresas da organização. - Caso existam várias empresas na organização, são validadas as permissões do utilizador para todas elas. - Caso o utilizador tenha permissões de acesso a apenas uma empresa, a empresa será inicializada para a única empresa disponível na lista de empresas da organização a que o utilizador tem acesso. - Caso o utilizador tenha permissões de acesso a mais do que uma empresa. Será verificado se o utilizador indicou alguma delas como sendo a sua empresa por omissão. Caso o tenha feito, será essa a escolhida se esta constar da na lista de empresas da organização a que o utilizador tem acesso. Caso contrário, será escolhida a última empresa selecionada (em qualquer outra entidade company dependent) no contexto da sessão atual. Caso não existe ainda nenhuma (na primeira utilização numa determinada sessão) o utilizador será obrigado a selecionar uma empresa antes de prosseguir.

9. É necessário modelar (ou usar) views diferentes para os editores de entidades company-dependent consoante o organização seja ou não multiempresa?

Não, os editores de entidades company dependent ajustam-se de acordo com a organização e o utilizador. Caso a organização tenha apenas uma empresa não existe sequer nenhum elemento visual que apresente a empresa ao nível da entidade. Caso a organização tenha várias empresas mas o utilizador tenha acesso a apenas uma delas, estará visível a empresa de trabalho mas não será possível alterá-la. Caso o utilizador tenha acesso a mais do que uma empresa numa organização, mesmo que esta seja automaticamente preenchida, será disponibilizado forma de o utilizador poder selecionar a empresa que pretender.

10. No momento de criação de uma entidade, é possível alterar a empresa quando esta foi preenchida automaticamente pelo sistema?

Depende. Se o utilizador tem permissões de acesso para mais do que uma empresa. Sim, caso contrário não.

11. No momento de criação de uma entidade, é possível alterar a empresa em qualquer momento (antes de gravar)?

Sim mas perderá todos os dados, caso responda afirmativamente à mensagem apresentada a alertar para este fato e a questionar o utilizador se deseja prosseguir.

12. Posso alterar a empresa de uma entidade já criada?

Não. No cenário suportado atualmente, após a criação de uma entidade, não é possível alterar a empresa a ela associada.

13. É possível definir uma empresa por omissão?

Sim, no momento em que o utilizador seleciona uma empresa, tem a possibilidade de a marcar como sendo a empresa a usar por omissão. Esta definição será guardada nos settings do utilizador e será mantida mesmo entre diferentes sessões.

14. Existe algum alerta para o utilizador quando muda entre tabuladores que no momento estejam a usar empresas diferentes?

Sim. Sempre que um utilizador muda entre tabuladores que no momento estejam a editar documentos\entidades em empresas diferentes, será informado através de uma mensagem de notificação. Esta mensagem não impede o utilizador de continuar a trabalhar normalmente mas só desaparecerá quando esta a fechar.

15. Entidades que não sejam CompanyDependent podem/devem definir a CompanyKey?

Não. Caso esta seja definida no objeto de retorno, o URI usado na navegação irá incluir essa chave e a rota estará incorreta.

16. É necessário validar o casing das actionTypes, moduleNames, etc?

Sim. Os parâmetros usados são usados para criar o URI. O casing deve estar de acordo com as rotas geradas

17. Caso se marque a base como IsActive = false o que acontece com as extensões?

Todas as extensões deixam de estar acessíveis enquanto a base não tiver ativa.

18. Ao inativar uma extensão esta é apagada?

Não, a extensão é marcada como IsActive = false, e não fica mais acessível enquanto não for novamente ativa na view da base.

19. Porque só posso definir como Include on  search atributos cujo tipo base seja texto?

Porque por questões de performance, será utilizando o FullTextSearch do SQL Server e este só permite indexação por este tipo de atributos.

20. Porque alguns dos atributos para selecionar como lookupattributes aparecem disable e não podem ser removidos.

Porque alguns são obrigatórios e serão garantidos pelo sistema (caso da naturalkey e description), outros por questões de performance e\ou não faz sentido aparecerem no interface (atributos não persistidos, ou do do tipo binary, uniqueidentifier,…) e outros ainda por não fazem parte da entidade (caso de composições por exemplo)

21. Posso definir uma entidade como sendo um extensão de uma entidade externa?

Sim. Para isso temos que incluir uma referência para o módulo ao qual essa entidade pertence e importar essa entidade para o modelo de entidades (como um entidade externa) e depois efetuar a ligação de extensão

22. Tenho que adicionar os atributos de sistema?

Não eles são adicionados automaticamente ao contruir o modelo.

23. Sei que alguns atributos de sistema dependem da própria entidade ou propriedades da mesma. O modelo gere essas alterações e ajusta os atributos de sistema em conformidade?

Sim. O modelo garante a consistência dos atributos de sistema com o estado atual da entidade no modelo.

24. O atributo FullImport deixou de existir, isso significa que podemos aceder a todos os atributos de uma entidade?

Não. O modelo passou a permitir selecionar que propriedades pretendemos incluir para uma entidade externa.

25. Se não definir o atributo DynamicDecimalPlacesPath significa que será usado um valor por omissão? (0 ou 2?)

Não. Caso não defina este atributo será usado o valor definido no atributo FixedDecimalPlaces.

26. Se definir o atributo DynamicDecimalPlacesPath como se comportará o UI em runtime enquanto o valor desse atributo ainda não estiver atribuído?

Enquanto não for possível avaliar a expressão definida nesse atributo será utilizado o valor definido no atributo FixedDecimalPlaces.

27. Se definir o atributo DynamicDefaultValue Path como se comportará o UI em runtime enquanto o valor desse atributo ainda não estiver atribuído?

Enquanto não for possível avaliar a expressão definida nesse atributo será utilizado o valor definido no atributo DefaultValue.

28. Quando adiciono uma menuoption num menu já existente e pretendo selecionar uma operation, porque não me aparecem todas?

Não é permitido utilizar a mesma operação no mesmo ramo de menu, para facilitar essa garantia, o seletor apenas apresenta as operações possíveis de selecionar nesse momento, nesse ponto no menu

29. Tenho que adicionar as operations, uma de cada vez?

Não. Se em cima de um menu invocar o menu de contexto e a opção add menu options, pode selecionar várias operations ao mesmo tempo e estas serão adicionadas ao respetivo menu.

30. Posso ter quantas operações quiser num menu?

Não. Cada menu apenas pode conter no máximo 10 entradas sejam elas submenus ou operations.

31. Um menu de role pode ser utilizado por vários roles?

Não , mas o menu da aplicação poderá ser utilizador por todos os utilizadores cujo role não tenha definido um menu específico.

32. Um role pode utilizar mais do que um menu?

Não. Um role apenas pode ser atribuído a um root menu.

33. É possível usar a mesma ServiceView para mais do que uma operação?

Sim desde que as operações sejam sobre o mesmo resource.

34. Uma ServiceView pode usar mais do que um ficheiro de UIRulesDefinition?

Sim. As UIRulesDefinition são definidas por operação. Isto permite por exemplo que uma operação de Insert e outra de Update sobre a mesma ServiceView possam definir conjuntos de regras diferentes.

35. Posso usar o mesmo ficheiro de regras em mais do que uma operação sobre a mesma ServiceView?

Sim. Para isso têm que preencher a propriedade UIRulesDefinition em todas as operações que desejar que usam essa mesma ServiceView.

36. É possível definir mais do que uma ServiceView sobre a mesma entidade?

Sim.

37. É possível ter o mesmo ficheiro de regras referenciado em mais do que uma ServiceView?

Sim.

38. Posso definir layout para uma ServiceView sem ter nenhuma operation associada?

Sim, no entanto só poderá aceder a essa view se lhe associar uma operação.

39. Preciso de atribuir valores para todos os tamanhos de dispositivos para que uma view possa ver renderizada em todos esses tamanhos?

Não. A view será sempre renderizada em todos os dispositivos, a atribuição dos valores nos vários tamanhos permite apenas definir como queremos que a view seja renderizada em cada um desses dispositivos. Os valores serão herdados dos dispositivos mais pequenos para os de maior dimensão.

40. É possível ter mais do que uma ListView sobre a mesma entidade para que a possa associar ao menu?

Sim é possível. Podemos até ter mais do que uma ListOperation sobre a mesma ListServiceOperation (podemos eventualmente definir ordenações ou agrupamentos diferentes, mostrar ou esconder outras colunas…)

41. É possível definir CreateActions e ViewServiceOperations em ListOperation do tipo Custom?

Não. Apenas ListOperations do tipo EntityManagement podem ter CreateActions a ViewServiceOperation.

42. Consigo colocar uma MainAction “custom” como MainAction principal?

Sim, basta coloca-la como primeira MainAction da operação e colocar as MainActions de sistema como “filhas” desta.

43. Consigo colocar uma MainAction “custom” como “filha” de uma MainAction de sistema?

Sim, basta identificar como ParentAction a MainAction de sistema pretendida

44. Quando altero a definição de serviço para incluir ou excluir um tipo de operação (Insert ou Update) o que preciso de fazer para atualizar as MainActions de sistema?

Após gravar o modelo de serviços, basta validar e\ou gravar o modelo de presentation para que as MainActions de sistema sejam atualizadas de acordo com a definição do serviço.

45. Um RowContainer de ContainerType ‘Expander’ e ContentType ‘ReferencedView’ tem que ter uma coluna (ColumnContainer)?

Não. Um RowContainer com estas propriedades não pode ter colunas. De facto, para além das validações necessárias, o menu de contexto do editor de layout não disponibiliza essa operação nem permite drag & drop de uma coluna para este tipo de container.

46. Quando coloco um RowContainer com ContainerType ‘Expander’ e ContentType ‘ReferencedView’ não me aparece a propriedade IsExpanded. Como fazê-lo?

Não. Um RowContainer com estas propriedades não permite essa opção.

47. Se ao tentar adicionar um referencedview não tiver nenhum elemento da combo de seleção que significa?

Significa que no modelo não existe nenhuma service view disponível para essa opção. Significa que no modelo não existe nenhuma service view desenhada sobre um resourceModel relacionado com a resourceModel da view atual e que não seja a MainResource de um serviço.

48. Se ao tentar adicionar um referencedwidget não tiver nenhum elemento da combo de seleção que significa?

Significa que no modelo não existe nenhum widget Terá que o(s) adicionar e implementar.

49. Como consigo “agrupar visualmente” widgets num dashboard na mesma linha?

Uma forma será dar um título à coluna, não dar títulos aos widgets e definir tamanhos nos widgets que lhe permitam permanecer lado a lado.

50. Posso ter uma ContextPage referenciada por mais do que uma Operation?

Sim. Basta estabelecer a associação.

**51. Quando tenha uma ContextPage referenciada por mais do que uma Operation posso selecionar que widgets aparecem em cada uma desses ServicesOperations?

Não. Quando associamos uma ContextPage a uma Operation estamos a herdar toda a definição da ContextPage.

52. Se num modelo válido, remover um parâmetro de um widget, um widget ou a sua associação de uma widget para uma ou mais contextpages, o modelo vai ficar inválido? Tenho que percorrer todos os links entre Operations e ContextPages para corrigir o atributo ParameterBindings?

Não. Após remover algum destes artefactos o modelo é automaticamente corrigido.

53. Posso ter duas ContextPages com o mesmo Display Index? Se puder, como é feita a ordenação?

Sim. Nesse caso o segundo critério de ordenação é a ordem alfabética do nome da ContextPage.

54. Posso ter views partiais numa serviceView associada a uma entidade que seja uma extensão?

Sim. A ServiceView tem as mesmas propriedades e características independentemente de se tratar de uma resource associada a uma entidade normal ou que seja uma extensão.

55. Sempre que tenho uma extensão, é necessário disponibilizar no modelo de presentation as respectivas Views e Extension operations?

Sim. É isso que permite a sua utilização.

56. Numa lista de EntityManagment é possível definir uma coluna que pertença à entidade da lista mas referencie outra entidade como sendo EntityDrillDown e LookupDrillDown em simultâneo?

Não. Colunas que referenciem outras entidades nunca terão a a propriedade LookupDrillDown disponível.

57. Numa lista de EntityManagment é possível ter mais do que uma coluna marcada como EntityDrillDown?

Sim. Qualquer campo pertencente à entidade que não referencie outra entidade nem seja uma dos tipos bloqueados para esse efeito (Memo, View, Phone, Email, URL) pode permitir drilldown para a entidade da lista.

58. Numa lista de EntityManagment é possível ter mais do que uma coluna marcada como LookupDrillDown?

Sim. Qualquer campo que referencie outra entidade que não seja de um dos tipos bloqueados para esse efeito (Memo, View, Phone, Email, URL) pode permitir drilldown para a entidade referenciada.

59. Numa lista de do tipo Custom é possível ter mais do que uma coluna marcada como LookupDrillDown?

Sim. Qualquer campo que não seja de um dos tipos bloqueados para esse efeito (Memo, View, Phone, Email, URL) pode permitir drilldown.

60. Posso ter uma ReportView referenciada por mais do que uma Operation?

Sim. Basta estabelecer a associação.

61. Posso ter uma ReportView referenciada como sendo o DefaultReport em mais do que uma Operation?

Sim. Só não podemos ter mais do que uma ReportView definida como DefaultReport para a mesma Operation.

62. Porque existem as ReportSections se não as podemos pagar mover ou adicionar novas?

Para garantir uma estrutura de report comum em todos os reports (e comum por tipo de report).

63. Posso definir uma lista sem opção de create nem view?

Sim. Basta colocar os atributos CreateEnabled e ViewEnabled a false, e removendo as CreateActions que possam existir.

64. Posso usar mais do que uma ItemTemplateView para o mesmo atributo detalhe e apresentar um template diferente consoante alguma condição do detalhe?

Não. Isso não é possível. O que pode é instruir o motor de regras com esse tipo de lógica para que este responda (mostre\esconda atributos) em função dos critérios que pretende.

65. Posso apresentar vários items em simultâmeo numa grelha com ContentDisplay”Form”?

Sim. Basta indicar que o valor de ItemsPerPage seja superior a 1.

66. Se após indicar a ActionType como “Custom”ao combo de seleção se ServiceActions não apresentar valores o que significa?

Significa que ocorre uma de duas situações com o serviço que é referenciado pela operação de suporte à view em questão. Ou não tem nenhuma service action modelada no modelo de serviços, ou tendo, a entidade referenciada pela mesma não é a correspondente à referenciada pelo atributo da view em causa (consultar atributo “Detail Target” da “ServiceAction” na design references do modelo de Serviços).

67. Posso juntar no mesmo column container, atributos com labels com posição “Above” e “Left”?

Não. Esse cenário não é permitido. A posição das colunas é definida por column container logo todos os atributos dentro dessa coluna apresentam a label na mesma posição.

68. Tenho uma lista custom com um parâmetro do tipo ColumnFilter, mas quando tento pesquisar um valor não disponibiliza nenhum valor. Pode-me faltar modelar alguma coisa?

"Não. Esse comportamento decorre da própria definição da lista custom e da forma como os parâmetros são utilizados. Quando definimos uma coluna do tipo column filter numa lista do tipo custom, os valores apresentados são apenas os valores disponíveis nos resultados dessa lista. A título de exemplo, um filtro para datas menores ou iguais a um parâmetro deve ser qualquer coisa como : WHERE [T1].[DocumentDate] <= ISNULL(@ToDate, DATETIMEFROMPARTS(9999,12,31,23,59,59,997)). Isto garante que caso não seja passado o parâmetro @ ToDate serão apresentados todos as datas."

69. O que necessito de fazer para implementar um CustomDrillDown?

"Necessita de colocar LookDrilldown = true, LookupDrilldownType = “Custom”. Adicionalmente deverá implementar o metodo gerado no ServiceController fazendo override ao método: protected override async Task OnDrillDownColumnAsync(string column, dynamic rowProperties) Neste poderá aceder às propriedades do objecto da seguinte forma rowProperties.PropertyName O retorno deverá ser algo semelhante a: ReturnNavigateAction action = new ReturnNavigateAction { ModuleName = moduleName,      NavigationType = NavigateType.Navigate,      ServiceName = serviceName,      OperationName = operationName,      Parameters = new List()      {       new NavigateParameter() { Property = ""id"", Value = id }      } };

return action; "

70. Pretendo utilizar um novo módulo que criei, mas não me aparece para adicionar o que falta fazer

Após compilar o módulo em causa é necessário instalar o package [modulename].Models no projeto Models da solução do produto.

71. Para que um utilizador tenha um menu, sou obrigado a criar roles de utilizadores e associar cada utilizador a um desses roles?

Não. O facto de não existam roles ou de um utilizador não ter nenhum role associado significa apenas que esse utilizador não terá definido um menu específico, mas utilizará o menu geral da aplicação.

72. Um serviço pode ter associada mais do que uma operação de serviço, do mesmo tipo?

Sim. Será o modelo de presentation que irá definir que operação de serviço será utilizada em cada view.

73. Um serviço pode gerar endpoints RIA e WCF ao mesmo tempo?

Sim. São utilizados templates diferentes para cada tipo de endpoint. Para isso a propriedade Endpoints deve ter o valor All.

74. Posso ter mais do que um serviço a referenciar a mesma entidade?

Sim, quer seja a usar a ResourceModel total ou uma específica.

75. Uma operação de serviço também pode gerar endpoints RIA e WCF ao mesmo tempo?

Sim. São utilizados templates diferentes para cada tipo de endpoint. Para isso a propriedade Endpoints deve ter o valor All.

76. A framework de modelação suporta views modeladas no Presentation Designer sobre serviços WCF?

Não. Embora a view seja gerada, o respetivo view model não é gerado neste momento.

77. É possível gerar apenas os business managers e as camadas inferiores para as operações standard de uma dada entidade?

Sim. As camadas geradas dependem da propriedade Acessibilidade. Basta selecionar Internal ou Private (neste caso a propriedade Endpoints será colocada a None). - Caso seja selecionado o valor “Internal” serão geradas as camadas de integração e managers - Caso seja selecionado o valor “Private” será apenas gerada manager

78. Também é possível gerar apenas os business managers e as camadas inferiores para uma dada operação de serviço?

Sim. De forma semelhante às operações standard do serviço.

79. É possível definir parâmetros para uma operação de serviço?

Sim. Basta adicionar os parâmetros pretendidos na operação de serviço respetiva.

80. É possível criar um serviço construtor para uma entidade detalhe da entidade associada ao serviço?

Sim. Basta criar uma nova operação de serviço, liga-la ao serviço pretendido, indicar como tipo de operação “CreateInstance” e selecionar a entidade pretendida.

81. Tenho que criar sempre um Resource Model para cada entidade que tenho no ED?

Não. Para cada entidade declarada no ED é sempre gerado um Resource Model que representa o modelo de objetos dessa entidade.

82. Se tiver um Resource Model associado a um serviço também tenho que o associar às ServiceOperations?

Não. Se um serviço tem uma resource model associada, será sempre utilizado por omissão.

83. Se tiver um Resource Model associado a um serviço consigo usar propriedades da entidade quando estou a definir os parâmetros?

Não. Se um serviço tem um resource model associado, será sempre utilizado este por omissão.

84. Posso alterar uma coluna criada como Custom para uma coluna de entidade (ou vice versa)?

Não. Uma coluna criada pela opção Add List Operation Column será sempre uma coluna Custom e uma coluna criada através da árvore de seleção de atributos será sempre uma coluna do modelo de entidades.

85. Posso ter mais do que uma operação de lista do tipo ServiceEntityList para a mesma entidade?

Sim. Não existe nenhuma limitação quanto a esta questão.

86. Preciso de definir uma ListOperation do tipo lookup para cada uma das associações?

Não. Não é necessário definir nenhuma ListOperation de lookup por associação. Só é necessário fazê-lo caso deseje colocar alguma condição especial (Filtro) ou deseje adicionar mais alguma coluna para além dos atributos de lookup definidos no modelo de entidades.

87. Se não definir uma ListOperation do tipo lookup para uma determinada associação que lista será usada?

Será usada a lista gerada e disponibilizada automaticamente que conterá todos os lookup attributes definidos no modelo de entidades.

88. É possível definir uma ListOperation de Lookup para um atributo de uma das entidades de detalhe?

Sim. É possível definir ListOperations de lookup para todos os atributos do tipo “View” que sejam associações da entidade principal ou dos seus detalhes.

89. Posso usar a mesma ListOperation de Lookup em mais do que um serviço?

"Não. Este cenário só se coloca quando temos mais do que um serviço sobre a mesma entidade (MainEntity) e para o mesmo LookupAttribute. Para este caso pode proceder do seguinte modo: - No modelo efetuar “Copy” sobre a ListOperation que pretende utilizar e de seguida “Paste” no Modelo. - Remover a ligação da nova ListOperation ao serviço inicial - Ligar a nova ListOperation ao serviço pretendido - Corrigir o nome da ListOperation"

90. Posso ligar um ResourceModel a mais do que uma ServiceOperation?

Sim desde que estas sejam sobre o mesmo Serviço

91. Posso ligar um ResourceModel a um serviço e a uma ServiceOperation do mesmo serviço?

Não. Esse cenário não é permitido. Caso tenha o ResourceModel associado a um Serviço, poderá usá-la normalmente nas service operations que estiverem associadas a esse serviço. Não é necessário efetuar “nova conexão” para a ServiceOperation em causa.

92. Posso usar um ResourceModel como parâmetro de uma ServiceOperation?

Sim caso seja Service Operation do tipo Command. Este é o único cenário em que faz sentido e mesmo neste caso só poderá usar 1 parâmetro desse tipo.

93. Posso ligar um ResourceModel a mais do que um Serviço?

Sim desde que os serviços tenham a mesma MainEntity. No entanto um ResourceModel só pode ser usado como MainResourceModel num único serviço.

94. Posso continuar a usar o Full Resource” mesmo que defina um ResourceModel com apenas algumas propriedades da entidade?

Não. Quando associar um ResourceModel a um serviço, o “FullResource” deixa de ser gerado e de estar disponível para as operações.

95. Necessito criar sempre Service Actions?

Não. Só é necessário criar serviceActions caso pretenda definir ações custom ou ações de validação sobre as suas views.

96. Também posso associar ServiceActions a serviços do Tipo Custom ou Picking?

Sim. Pode fazê-lo, exemplos disso são ações de validação. Mas de facto no caso de um serviço do tipo Picking é mesmo necessário criar pelo menos aquela que será a “ação principal” do serviço.

97. No caso de serviços de tipo picking não tenho entidades, apenas resources. Posso criar uma service Action associada à resource detail?

Sim, para esse tipo de serviço a detail resource terá o mesmo tipo de comportamento que teria uma entidade detail, basta referenciá-la na propriedade DetailTarget.

98. Necessito de criar Service Actions para as Operações standard?

Não. Essas actions serão geridas automaticamente e criadas em função das propriedades do serviço.

99. Em que tipo de situações queremos usar uma serviço sem entidade?

Por exemplo quando queremos efetuar\retornar algum tipo de cálculo sobre os dados – possivelmente envolvendo várias entidade (eventualmente usando um StoredProcedure) e retornar uma resource apenas com os valores de resultado. Para um cenário deste tipo, esta funcionalidade obrigaria basicamente apenas a implementar o método no manager respetivo.

100. Posso decidir para cada lista (de lookup ou outra) que valores de um atributo Money apresentar?

Sim. Poderá decidir que valores do Money apresentar para cada atributo deste tipo.

101. Se tiver um atributo do tipo Money fizer parte da lista de lookups da entidade para a qual estou a definir a lista, posso desmarcá-lo ou adicionar outros valores desse atributo?

Sim e Sim. Um atributo do tipo Money não é um atributo pesquisável logo, pode desmarca-lo. Caso apenas algum dos valores do atributo Money faça parte dos LookupAttributes, pode selecionar os restantes valores caso os pretenda incluir.

102. Se marcar os três valores do Money serão geradas 3 colunas. Elas ficam todas com a mesma caption ou posso alterar?

Não. Por omissão as colunas ficam com a “Caption” do atributo Money para a coluna do valor na moeda do documento, “Caption (Company)” para a coluna da valor na moedada empresa e “Caption (Organzation)” para a coluna do valor na moeda da organização. Apenas disso, estas colunas tem a propriedade Caption disponível pelo que pode editar esse valor como entender.

103. Posso definir uma lista para uma entidade que seja extensão?

Sim. Não existe qualquer limitação. Nessa lista poderá selecionar atributos quer da entidade base quer da entidade extensão.

104. Porque não aparecem os atributos não persistidos, nem marcados como internal ou do tipo UniqueIdentifier?

As listas são geradas diretamente na base dados, logo só suportam atributos que existam fisicamente na base de dados. O atributo “Internal” serve para limitar o acesso a determinados atributos à API de integração pelo que também não faz sentido incluí-los aqui. O tipo UniqueIdentifier foi excluído por não apresentar qualquer valor para o utilizador final.

105. Quando o public resource é o full resource significa que o resource publico conterá todos os atributos do modelo de entidades?

Não. Atributos marcados como readonly, não serão disponibilizados. Adicionalmente, caso existam atributos custom associados a resourcemodels referenciados pelo serviço, esses também serão incluídos ao nível indicado nessas resources.

106. Posso utilizar a mesma resource para a API publica e a API interna?

Sim. A mesma resource pode ser utilizada em ambas as APIs.

107. Posso utilizar uma resource referenciada como ViewEnable false como resource publica?

Sim. O facto de existir um serviço não significa que este tenha que ser utilizado pelo modelo de presentation.

108. Em que casos interessa retirar o filtro associado ao serviço numa lista de entidades?

Por exemplo em casos em que temos a mesma entidade a ser disponibilizada por dois serviços distintos usando resources distintas (Ex: Faturas e faturas simplificadas). Se pretender disponibilizar uma lista contendo todos os tipos de faturas terá que colocar o atributo “Include Service filter” a false.

109. Se pretender apresentar uma lista de entidades contendo items anulados o que necessito de fazer?

Apenas tem que indicar isso colocando o atributo Exclude deleted items a false. Note que só pode fazê-lo caso a entidade que pretende listar esteja marcada como Deletable a false no modelo de entidades.

110. Como se deve atribuir um valor a um atributo Money?

Usando os construtores do tipo Money (exemplo: moneyValue = new Money(10.00, currency, 1.2)) ou através da propriedade BindAmount sem afetar a moeda e os câmbios (exemplo: moneyValue.BindAmount = 12.00).

111. Como posso fazer override à taxa de câmbio usada num determinado atributo Money?

Através dos construtores da classe Money que permitem especificar a taxa de câmbio.

112. Dada uma transação qual é a moeda em que estão os valores monetários?

Se implementar um dos interfaces e for company-dependent é selecionada a moeda base ou a selecionada pelo utilizador, caso seja company-independent será a moeda da organização.

113. Dada uma transação qual é a respetiva moeda base?

Se a entidade não for company-dependent (nem o seu master no caso de detalhes), será a moeda de reporting da organização. Se a entidade for company dependent mas não existir nenhuma empresa selecionada, será a moeda de reporting da organização. Caso contrário será a moeda base da empresa selecionada.

114. Como adicionar diferentes formatações a colunas?

No modelo de apresentação, é possível definir uma formatação standard para determinada coluna, para as linhas em que outra coluna do tipo boolean estejam activas, usando a propriedade  "Standard Formatting" da list view. Nota: Só é possível associar a formatação standard quando a coluna tem a propriedade ""Style"" = None e quando o tipo de coluna não é boolean.

115. Como adicionar um Web Component a uma view?

Basta aceder ao modelo de apresentação, abrir o editor de layout da editor view,  e após selecionar o elemento pretendido, escolher o Field Type = "Web Component". Após selecionar o field type,  fica disponível uma área ""WebComponent"" com os atributos configuração e nome. O nome é obrigatório.

116. É possível criar um Draft de uma entidade de outro módulo?

Sim. Para isso é recomendado recorrer a um dos dois overloads do método CreateAsync, sem TController, disponíveis no DraftsService. Exemplo de utilização:

ItemResource itemResource = new ItemResource()
{
   ...
};

DraftModel<ItemResource> draft = await this.DraftsService.CreateAsync<ItemResource>(
   itemResource,
   DraftOperationType.Create,
   DraftState.Edit,
   "businesscore_createitem");

117. Como modelar a apresentação de um campo do tipo Boolean para a Checkbox aparecer corretamente alinhada para os vários tamanhos de ecrã?

  1. Ao editar o layout da view, no campo que é Boolean, piscar a opção "Reserve Label Space",
  2. Para os vários tamanhos de ecrã, devemos colocar 12 colunas para o campo Boolean sempre que o campo fica sozinho (sem nenhum campo à sua esquerda ou direita) na mesma linha.

    Por exemplo, numa View com 3 campos, todos a ocupar 6 colunas em modo tablet, o último campo vai ficar sozinho na sua linha (visto que os primeiros dois campos vão ocupar 12 colunas), caso o último campo for do tipo Boolean, temos de colocar o campo a ocupar 12 colunas em modo tablet para garantir que o campo vai ser apresentado corretamente.

    Esta regra é aplicada para todos os tamanhos de ecrã (Phone/Tablet/Desktop/LargeDesktop)