2010-06-23 22 views
1

Pouvons-nous utiliser une fonction lotuscript comme routine de sélection de document dans la formule de sélection de vue?Comment utiliser une fonction LotusScript comme routine de sélection de document

Voici ma fonction de lotus qui détermine les critères de sélection

Function MyFilter(doc As NotesDocument) as boolean

'very complex filtering function '........

End Function

et est ici la formule de sélection de vue que je veux intégrer la fonction de lotus à l'intérieur

SELECT (Form = "Form1")

  1. pouvons-nous utiliser la fonction de lotus ci-dessus à l'intérieur de la formule de sélection de quelque façon que ce soit?

    SELECT (Form = "Form1" & MyFilter(sourceDoc))

  2. peut-on éviter le langage de formule dans la sélection de la vue et remplir la vue au moment de l'exécution en parcourant chaque document dans la base de données et l'ajout du document à la vue, au besoin?

  3. Existe-t-il un moyen d'écrire une "formule définie par l'utilisateur" (langage de formule)? Peut-on écrire une API C pour résoudre de tels problèmes?

Répondre

3
  1. Non, vue formules de sélection ne peuvent pas contenir LotusScript

  2. pas en vue, mais vous êtes sur quelque chose là-bas. Je l'ai fait dans le passé en utilisant des dossiers. Les vues contiennent un ensemble de documents correspondant à une formule de sélection d'affichage. D'un autre côté, les dossiers peuvent contenir une collection de documents placés par un utilisateur ou par un code. Dans le monde Lotusscript, vous accédez à un dossier de la même manière qu'une vue, en utilisant la classe NotesView. Vous pouvez ensuite appeler la méthode PutInFolder du document ou la méthode PutAllInFolder d'un documentcollection pour ajouter des documents à ce dossier. Non. Vous pouvez cependant spécifier la formule utilisée par les vues par programmation via la propriété SelectionFormula. Mais cette propriété attend une chaîne écrite en langage de formule. Je ne suis pas très familier avec l'API C, mais je parie que vous ne pouvez faire que la même chose que # 3 - spécifiez la formule utilisée comme formule de sélection. Cela ne vous aidera pas à sélectionner des documents basés sur le code LotusScript.

J'ai déjà parcouru cette route dans quelques projets, et la meilleure solution que j'ai trouvée était ce que je suggère dans la réponse 2. C'est-à-dire que vous pouvez effacer, puis remplir un dossier par programme, puis amener l'utilisateur dans ce dossier en tant qu'étape finale de votre code. En utilisant cette méthode, vous êtes libre d'utiliser LotusScript pour filtrer les documents et construire votre vue "Résultats de la requête".

Une autre méthode moins idéale mais fonctionnelle que vous pouvez utiliser consiste à marquer un élément dans tous les documents avec une valeur spéciale, puis filtrer une vue pour afficher uniquement les documents avec des éléments égaux à cette valeur spéciale. Par exemple, vous pouvez lancer une recherche dans LotusScript pour créer une collection de documents à l'aide de la méthode db.Search. Utilisez ensuite la méthode documentcollection.StampAll pour définir l'élément "SHOWME" sur "YES". Ensuite, votre vue devra simplement être définie pour afficher uniquement les documents où SHOWME = "YES".Bien sûr, vous devez supprimer cet élément SHOWME de tous les documents de la base de données comme première étape de ce code, de sorte que vous démarrez avec une table rase à chaque fois. Cette méthode deviendrait de plus en plus lente, plus vous auriez de documents, mais si vous n'avez que quelques centaines de documents, cela fonctionnerait bien.

Espérons que cela aide!

+0

votre (3) n'est pas tout à fait vrai - vous pouvez créer des « formules définies par l'utilisateur » en écrivant un pilote de base de données et en utilisant @DbCommand, @DbLookup ou @DbColumn (Ben Langhinrichs utilisé que astuce avec son jeu d'outils @Midas). Le "pilote de base de données" serait une DLL contenant des appels API C. Le problème étant que vous ne pouvez pas non plus utiliser @DbCommand ou @DbLookup dans une formule de sélection de vue, mais si vous avez les côtelettes pour construire l'outil, vous pouvez donner aux "développeurs" uniquement la possibilité de créer des applications qu'ils ne pourraient pas sinon écris. (Et, si vous connaissez des enregistrements de CD comme Ben, vous pouvez faire @DbLookup contre les tables de texte enrichi.) –

+0

Good stuff Stan, merci. –

1

Malheureusement, vous ne pouvez pas utiliser Lotuscript dans les formules de sélection de vue. Cependant, une façon dont nous avons traité ceci dans le passé consiste à appeler votre formule complexe dans un événement QuerySave (ou WebQuerySave) sur un formulaire et à définir un champ masqué sur tous les documents à Oui ou Non. Ensuite, utilisez simplement ce champ masqué selon vous la sélection formule:

SELECT (Form = "Form1" & MyFilterField="Y")