2017-08-30 3 views
0

Je souhaite créer une vue contenant uniquement les documents les plus récents (plus récents que 2 mois). J'utilise cette sélection formular:Remarques Formule Langue Date Différence

SELECT @IsAvailable($Conflict) and docForm="ServiceOrders" and (@Today-PosDesValidFrom)<5259600 

Lorsque les 5.259.600 sont les 2 mois en quelques secondes parce que je lis que l'opérateur - renvoie le timespan en quelques secondes. Je n'ai aucun résultat à mon avis.

Répondre

1

Jamais N'utilisez @Today ou @Now dans les formules de sélection de vue. L'index de vue ne sera alors jamais mis à jour, par conséquent la tâche de mise à jour fonctionnera constamment pour actualiser l'index. Cela affectera la performance négative.

Ce que vous devez faire est d'avoir un agent quotidien (dans votre cas, probablement tous les soirs) qui marquera les documents à afficher dans la vue. Pour que l'agent soit le plus rapide possible, traitez une vue dans laquelle vous affichez la date dans l'une des colonnes.

Le absolument le plus rapide serait comme ceci:
1) Créez une vue cachée appelée (LookupServiceOrdersByValidDate).
2) La première colonne contiendra le nom du champ PosDesValidFrom (je suppose qu'il s'agit d'un champ de date, sinon vous devez le convertir à ce jour), et être trié par ordre décroissant. Allez dans le quatrième onglet de l'infobox pour la colonne et assurez-vous que vous l'avez défini sur Date/Heure.
enter image description here
3) Créez une deuxième colonne dans laquelle vous affichez le champ de texte DisplayIn2MonthView. Trier aussi décroissant.
4) Sauvegardez la vue.

Vous avez maintenant une vue que vous pouvez parcourir en utilisant un agent. Comme il est trié en descendant avec le plus récent au sommet, dès que vous arrivez à une date de plus de 2 mois, vous pouvez arrêter l'agent et avoir terminé.

Le script ressemblerait à quelque chose comme ceci:

Dim session as New NotesSession 
Dim db as NotesDatabase 
Dim view as NotesView 
Dim col as NotesViewEntryCollection 
Dim entry as NotesViewEntry 
Dim doc as NotesDocument 
Dim validDate as NotesDateTime 
Dim cutoffDate As NotesDateTime 

' Get current date and time and go back 2 months 
Set cutoffDate = New NotesDateTime(Now()) 
Call cutoffDate.AdjustMonth(-2) 
' Drill down to view 
Set db = session.CurrentDatabase 
Set view = db.GetView("(LookupServiceOrdersByValidDate)") 
' Create a collection of all entries in the view and loop through them 
Set col = view.AllEntries 
Set entry = col.GetFirstEntry() 
Do Until entry is Nothing 
    ' Get value in first column in view and use it to create new DateTime object 
    validDate = New NotesDateTime(entry.ColumnValues(0)) 
    ' Check if we are within the 2 month cutoff date 
    If Cdat(validDate.dateOnly)>=Cdat(cutoffDate) Then 
     ' Get document and set flag to display 
     Set doc = entry.Document 
     Call doc.ReplaceItemValue("DisplayIn2MonthView","Yes") 
     Call doc.Save(True,False) 
    Else 
     ' We are beyond the cutoff date, but we need to clear old flags. 
     ' Read the value in the second column and see if it is "Yes" 
     If entry.ColumnValues(1)="Yes" Then 
      Set doc = entry.Document 
      Call doc.ReplaceItemValue("DisplayIn2MonthView","") 
      Call doc.Save(True,False) 
     Else 
      ' Since all "Yes" values should be at the top, if we 
      ' get here there should be no more flagged documents. 
      Exit Do 
     End If 
    End If 
    Set entry = col.GetNextEntry(entry) 
Loop 
Print "All done." 

Enfin, modifiez la vue pour afficher les documents. Vous devriez probablement utiliser le champ Form, pas docForm. Définissez la formule de sélection sur
SELECT [email protected]($Conflict) AND Form="ServiceOrders" AND DisplayIn2MonthView="Yes" La vue doit maintenant contenir uniquement les documents ServiceOrder avec une date de validation au cours des deux derniers mois. Si vous voulez vraiment que la réplication/sauvegarde des conflits dans la vue, assurez-vous que la vue est réglé sur pas documents de réponse d'affichage dans une hiérarchie (décocher la case): enter image description here

+0

C'est une idée très intelligente, chose regrettable c'est que je n'ai pas la permission de créer de nouveaux champs dans les formulaires. – Curunir

+0

Pour une raison quelconque, je reçois une incompatibilité de type sur cutoffDate ici: CDat (validDate.dateOnly)> = CDat (cutoffDate) – Curunir

+0

@exasswede Cette solution fonctionne pour moi mais le problème est qu'un nouvel ordre n'apparaîtra pas visible jusqu'à ce que le l'agent court sur la vue. – Curunir