Objective
After completing this lesson, you will be able to crie diálogos personalizados para botões usando popups e scripts.
Cenário: criar diálogos personalizados com popups
Assista a este vídeo para saber mais sobre o requisito da equipe para botões ampliados e diálogos personalizados para sua história de planejamento.
En
Sua equipe começou a trabalhar com a história de planejamento ampliado e o planejador copiou versões e o ano usando o botão de ação de dados ampliados que você criou. Eles vêm até você para obter orientação, pois têm várias ações de dados novas necessárias devido às diferentes combinações de versão e ano na história de planejamento.
Você sugere ampliar ainda mais o botão de ação de dados com um popup em que, em vez de simplesmente executar a ação de dados, os planejadores serão solicitados a selecionar a versão e o ano de origem e de destino necessários.
Eles também querem uma forma de criar facilmente versões privadas e excluir versões privadas quando a história está no modo de visualização, bem como publicar uma versão privada como uma nova versão pública.
Você trabalha com seu colega Kevin para entender totalmente o requisito empresarial e cria uma série de botões e popups personalizados que:
- Cria uma versão privada copiando uma versão existente, dando ao planejador a opção de copiar a versão com ou sem dados.
- Executa uma ação de dados com um prompt para permitir que o planejador selecione o ano de origem e de destino ao selecionar Copiar dados por versão e data. Ele também fornece uma caixa de diálogo personalizada quando a ação de dados está copiando e atualizando os dados na tabela, como mostrado abaixo.
- Atualiza e classifica novos membros de forma alfanumérica cada vez que a página é aberta, garantindo que os planejadores tenham as opções mais atualizadas para selecionar.
- Permite que eles publiquem uma versão privada como uma nova versão pública.
- Dá-lhes a capacidade de excluir uma versão privada que não é mais necessária.
Configuração da história
Antes de adicionar scripts, você deve primeiro adicionar os botões necessários à sua história e criar e configurar popups que usará.
Copiar versão com ou sem dados
A equipe deseja copiar uma versão existente para criar uma nova versão privada diretamente da história. Eles querem ter a opção de criá-la com ou sem dados. Para isso, você cria o botão BTN_CopyVersion e o popup POPUP_CopyVersion.
O pop-up POPUP_CopyVersion é configurado como mostrado:
Copiar dados por versão e data
A equipe deseja ter uma ação de dados que permitirá selecionar versões e anos em vez de ter vários iniciadores de ação de dados na história. Eles querem um pop-up personalizado solicitando que eles aguardem até que a ação de dados termine de copiar os dados.
Para isso, você renomeia BTN_Copy para BTN_CopyData e cria os popups POPUP_CopyData e POPUP_Wait.
O popup POPUP_CopyData é configurado como exibido:
O popup POPUP_Wait é configurado como exibido:
Publicar versão privada como nova versão pública
A equipe quer publicar suas versões privadas como novas versões públicas e fazer isso diretamente a partir da história. Para isso, você cria o botão BTN_PublishAs e o popup POPUP_PublishAs.
O popup POPUP_PublishAs está configurado como exibido:
Excluir uma versão privada
Se uma versão privada não for necessária, a equipe poderá excluí-la da história. Para isso, você cria o botão BTN_Delete e o popup POPUP_Delete.
O popup POPUP_Delete é configurado como exibido:
Código utilizado no cenário
Copiar versão
A equipe deseja copiar uma versão existente para criar uma nova versão privada diretamente da história. Eles querem ter a opção de criá-la com ou sem dados.
O seguinte código é adicionado ao evento BTN_CopyVersion - onClick:
1
POPUP_CopyVersion.open();
Em seguida, o seguinte código é adicionado ao evento POPUP_CopyVersion - onButtonClick:
1234567891011121314151617181920212223
// Copy with Data
if (buttonId === "Btn_Copy") {
var oPlanning = TBLPLANNING.getPlanning();
if (oPlanning) {
var oBudgetVersion = oPlanning.getPublicVersion(DD_Copy_PublicVersion.getSelectedKey());
if (oBudgetVersion) {
oBudgetVersion.copy(INF_Copy.getValue(), PlanningCopyOption.AllData, SO_Planning.getPlanningCategory(CategoryDropdown));
SO_Planning.updateDropdowns("");
}
}
}
//Copy without Data
else if (buttonId === "Btn_Copy_wo_Data") {
oPlanning = TBLPLANNING.getPlanning();
if (oPlanning) {
oBudgetVersion = oPlanning.getPublicVersion(DD_Copy_PublicVersion.getSelectedKey());
if (oBudgetVersion) {
oBudgetVersion.copy(INF_Copy.getValue(), PlanningCopyOption.NoData, SO_Planning.getPlanningCategory(CategoryDropdown));
SO_Planning.updateDropdowns("");
}
}
}
POPUP_CopyVersion.close();
Copiar dados por versão e data
Quando o botão Copiar dados por versão e ano é selecionado na história, você deseja:
- As listas suspensas de versões e anos disponíveis são atualizadas e ordenadas.
- A caixa de diálogo pop-up Esperar é acionada.
- O pop-up Copiar dados solicita que os planejadores especifiquem os valores para os quatro parâmetros usando os menus suspensos.
- A ação de dados copia e atualiza os dados na tabela enquanto o popup de espera está na tela.
- O popup de espera é fechado quando a execução da ação de dados é concluída.
- O pop-up Copiar dados é fechado.
Para abrir o pop-up POPUP_CopyData quando o botão Copiar dados por versão e ano é selecionado na história, o seguinte script é adicionado ao evento BTN_CopyData – onClick:
Antes de os planejadores selecionarem a versão e a data necessárias, a lista de versões terá que ser atualizada e ordenada. O seguinte código é adicionado ao evento POPUP_CopyData - onButtonClick:
123
TBLPLANNING.getDataSource().refreshData();
//Call Global Script function to update and sort version and year
SO_Planning.updateVerYear();
Em seguida, o seguinte código também é adicionado ao evento POPUP_CopyData - onButtonClick:
1234567891011
if (buttonId === "Btn_CopyData") {
POPUP_Wait.open();
DataAction_1.setParameterValue("SourceVersion", DD_Source_Ver.getSelectedKey());
DataAction_1.setParameterValue("TargetVersion", DD_Target_Ver.getSelectedKey());
DataAction_1.setParameterValue("SourceYear", DD_Source_Yr.getSelectedKey());
DataAction_1.setParameterValue("TargetYear", DD_Target_Yr.getSelectedKey());
DataAction_1.execute();
TBLPLANNING.getDataSource().refreshData();
POPUP_Wait.close();
}
POPUP_CopyData.close();
Publicar versão privada como nova versão pública
A equipe quer publicar suas versões privadas como novas versões públicas e fazer isso diretamente a partir da história.
Para abrir o pop-up POPUP_PublishAs quando o botão Publicar como é selecionado na história, o seguinte script é adicionado ao evento BTN_PublishAs - onClick:
12
INF_PublishAs.setValue("");
POPUP_PublishAs.open();
Em seguida, o seguinte código é adicionado ao evento POPUP_PublishAs - onButtonClick:
123456789101112131415161718
if (buttonId === "Btn_Ok") {
var newName = INF_PublishAs.getValue();
console.log(["newName", newName]);
if (newName !== "") {
// publish private version myActual as public version with name
var myVersion = TBLPLANNING.getPlanning().getPrivateVersion(DD_PublishAs_Versions.getSelectedText());
console.log(["myVers", myVersion.getId()]);
if (myVersion) {
console.log(["myActualVersion ID", myVersion.getId()]);
myVersion.publishAs(newName, SO_Planning.getPlanningCategory(DD_PublishAs_Category));
}
SO_Planning.updateDropdowns("");
}
}
POPUP_PublishAs.close();
Excluir uma versão privada
Se uma versão privada não for necessária, a equipe poderá excluí-la da história.
Para abrir o pop-up POPUP_Delete quando o botão Excluir é selecionado na história, o seguinte script é adicionado ao evento BTN_Delete - onClick:
O código a seguir também foi adicionado a POPUP_Delete - onButtonClick:
12345678910111213141516171819202122232425
if (buttonId === "Btn_Yes") {
var oPlanning = TBLPLANNING.getPlanning();
var versionName = DD_Delete_Version.getSelectedText();
//Delete all versions
if (versionName === "All versions") {
var oPrivatversions = TBLPLANNING.getPlanning().getPrivateVersions();
console.log(["Version ", oPrivatversions]);
for (var i = 0; i < oPrivatversions.length; i++) {
console.log(["Version ", oPrivatversions[i].getId()]);
oPrivatversions[i].deleteVersion();
}
}
else {
//delete specific version
if (oPlanning) {
var oPrivateVersion = oPlanning.getPrivateVersion(versionName);
if (oPrivateVersion) {
oPrivateVersion.deleteVersion();
SO_Planning.updateDropdowns("");
}
}
}
}
POPUP_Delete.close();
Atualizar na inicialização da página ou na atualização de tabela
O seguinte script foi adicionado a Page_1 – onInitialization e TBLPLANNING – onResultChanged:
123456
//Call Global Script function to check for private versions
SO_Planning.updateButtonVisibility();
//Call Global Script function to populate dropdowns with private version names
SO_Planning.updateDropdowns("");
//Call Global Script function to update and sort version and year
SO_Planning.updateVerYear();
Objetos de script
O seguinte script foi adicionado a SO_Planning – updateDropdowns:
123456789101112131415161718192021222324
// clean up the dropdowns before adding values to them
DD_PublishAs_Versions.removeAllItems();
DD_Delete_Version.removeAllItems();
// retrieve all private versions available in the model
var privVersions = TBLPLANNING.getPlanning().getPrivateVersions();
//if private version exists
if (privVersions.length > 0) {
// iterate over the private versions
for (var i=0; i<privVersions.length; i++ ) {
// add them to the dropdown boxes
DD_PublishAs_Versions.addItem(privVersions[i].getId(),privVersions[i].getDisplayId());
DD_Delete_Version.addItem(privVersions[i].getId(),privVersions[i].getDisplayId());
if (selectedPrivateVersion === "" && i === 0) {
DD_PublishAs_Versions.setSelectedKey(privVersions[i].getId());
DD_Delete_Version.setSelectedKey(privVersions[i].getId());
}
}
DD_Delete_Version.addItem("ALL","All versions");
DD_Delete_Version.setSelectedKey("ALL");
}
O seguinte script foi adicionado a SO_Planning – updateVerYear:
123456789101112131415161718192021222324252627282930313233343536373839404142
var i = 0;
var count_of_year = 0;
var version_mbr = TBLPLANNING.getDataSource().getMembers("Version");
var year_mbr = TBLPLANNING.getDataSource().getMembers("YearMonth");
var sort_list_version = ArrayUtils.create(Type.string);
var sort_list_year= ArrayUtils.create(Type.string);
var temp = ArrayUtils.create(Type.string);
for (i = 0;i<version_mbr.length; i++)
{
sort_list_version[i] = version_mbr[i].description + "," +version_mbr[i].id;
}
sort_list_version.sort();
for (i = 0;i<sort_list_version.length; i++)
{
temp = sort_list_version[i].split(",");
DD_Source_Ver.addItem( temp[1], temp[0]);
DD_Target_Ver.addItem( temp[1], temp[0]);
}
for (i = 0;i<year_mbr.length; i++)
{
if (year_mbr[i].description.length === 4)
{
console.log (year_mbr[i].description);
sort_list_year[i] = year_mbr[i].description + "," + year_mbr[i].id;
count_of_year++;
}
}
sort_list_year.sort();
for (i = 0;i < count_of_year; i++)
{
temp = sort_list_year[i].split(",");
DD_Source_Yr.addItem( temp[1], temp[0]);
DD_Target_Yr.addItem( temp[1], temp[0]);
}
O seguinte script foi adicionado a SO_Planning – updateButtonVisibility:
12345678910111213
// retrieve all private versions available in the model
var selectedPrivateVersion = TBLPLANNING.getPlanning().getPrivateVersions();
//if private version exists
if (selectedPrivateVersion.length > 0) {
BTN_PublishAs.setVisible(true);
BTN_Delete.setVisible(true);
BTN_CopyData.setVisible(true);
} else {
BTN_Delete.setVisible(false);
BTN_PublishAs.setVisible(false);
BTN_CopyData.setVisible(false);
}
Criar diálogos personalizados com popups
Fluxo de tarefa: neste exercício prático, você irá:
- Crie um pop-up de diálogo de seleção de dados personalizados com menus suspensos.
- Crie um pop-up personalizado de mensagem de espera.
- Adicione scripts para executar a caixa de diálogo de seleção de dados e exiba mensagem de espera quando a ação de dados estiver em execução.
- Adicione scripts ao botão, página e popups para garantir que eles sejam executados e estejam sempre atualizados.