Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Lors d'un SaveAs en PDF, Excel,... sur un rapport contenu dans une librairie d'edition (PBL) contenant des nested report, seul le principal est imprimé dans le fichier de destination.
Pour voir apparaître les autres, il faut impérativement que ces fichiers soit présents dans une librairie compilée (fichier PBD).
Pré requis :
- Compiler une librairie et placer ce fichier PBD dans le répertoire de l'application (is_filepbd_model dans le code). Il sera utilisé comme modèle d'une librairie compilée temporaire.
Voici l'algorithme résumé :
- Détection de la présence d'un rapport imbriqué
- Création d'une PBD temporaire à partir du modèle
- Transfert des rapports liés dans la PBD
- Rattachement du fichier PBD à la librairie list de votre application
Voici le code de la fonction (un argument nommé as_ds, la DataStore du rapport principal):
/*==> Gestion de la présence d'un rapport imbriqué <==*/ string ls_objets, ls_buffer, ls_tab_objets[], ls_nom_rapport, ls_syntax, ls_erreurs, ls_temp, ls_tab_delete[] integer li_nb, li_ret boolean ab_creation = true, ab_need_pbd = false long ll_i /*==> Recherche d'un rapport imbriqué <==*/ ls_objets = as_ds.object.datawindow.Objects li_nb = 1 ls_buffer = ls_objets do if pos(ls_buffer, '~t') = 0 then ls_tab_objets[li_nb] = ls_buffer ls_buffer = '' else ls_tab_objets[li_nb] = trim(left(ls_buffer, pos(ls_buffer, '~t') - 1)) ls_buffer = trim(mid(ls_buffer, pos(ls_buffer, '~t') +1)) end if if isnull(ls_tab_objets[li_nb]) or ls_tab_objets[li_nb] = '' then li_nb++ continue end if /*==> S'agit il d'un nested <==*/ if as_ds.describe(ls_tab_objets[li_nb] + '.type') = 'report' then if ab_creation then /*==> Copie de la PBD modèle <==*/ is_filepbd_temp = string(today(), 'yymmdd') + string(now(), 'hhmmssffffff') + string(rand(32000)) +'.pbd' li_ret = FileCopy(is_filepbd_model,is_filepbd_temp) of_log("Fichier PBD généré : " + is_filepbd_temp,0) if li_ret = -1 then of_log("Erreur lors de la creation du fichier PBD (Accès au fichier modèle) : " + is_filepbd_temp,0) elseif li_ret = -2 then of_log("Erreur lors de la creation du fichier PBD (Ecriture du fichier temporaire) : " + is_filepbd_temp,0) end if /*==> Flage la creation de la PBD <==*/ ab_creation = false end if /*==> Extraction du dataobject <==*/ ls_nom_rapport = as_ds.describe(ls_tab_objets[li_nb] + '.Dataobject') /*==> Export du rapport <==*/ ls_syntax = LibraryExport(is_nom_pbl, ls_nom_rapport, ExportDataWindow!) /*==> import du rapport dans la PBD <==*/ li_ret = LibraryImport(is_filepbd_temp, ls_nom_rapport, ImportDataWindow!, ls_syntax, ls_erreurs) if li_ret < 0 then of_log("Erreur d'import du rapport "+ ls_nom_rapport + " dans la PBD :~r~n" + ls_erreurs + "~r~nVérifiez que " + is_filepbd_temp +" n'est pas verrouillé en écriture et réessayez",0) return -1 else of_log("Import du rapport "+ ls_nom_rapport + " dans le fichier " + is_filepbd_temp,0) end if ab_need_pbd = true end if li_nb++ loop while not isnull(ls_tab_objets[li_nb - 1]) and ls_tab_objets[li_nb - 1] <> '' /*==> Ajout de la PBD dans le librarie liste de l'application <==*/ if ab_need_pbd then li_ret = addtolibrarylist(is_filepbd_temp) if li_ret <> 1 then // inv_mail.of_ajoutlog(inv_mail.ii_handlefichier,"Erreur lors de AddToLibraryList de " + is_filepbd +". li_ret = " + string(li_ret)) end if end if /*==> Tout s'est bien passé <==*/ return 1
Dernière modification par mial (03-12-2010 10:15:51)
Hors ligne
Mais on n'oublie pas les bonnes vieilles habitudes:
Hors ligne
Autant pour moi.
C'est corrigé!
Hors ligne
Nickel 000 pépites
Hors ligne
Pages: 1