Are your servers running out of space as more, and more complex data is sent thru or stored in applications on the servers? Are your users keep on sending bit like attachments again and again? Do standard tasks like compact or fixup last for ages or does your backup still runs during working hours? Learn how to benefit from build-in space saving features. Maximize disk space savings provided by Domino Attachment and Object Service (DAOS) and ensure that your environment is properly configured for best performance with this feature. Reduce network bandwidth when replicating databases between servers and increase mail quotas without using more disk space. As of Domino 9.0.1, DBMT is the swiss army knife for administrators. Learn about pre-allocating space to avoid file fragmentation during a copy-style compact. Ensure that a mail application in a clustered environment is always available and mail gets delivered while performing file compaction and other standard tasks
#DNUG45 - Manage Session IBM Notes & Domino - Fix & Feature Packs und Best ...Christoph Adler
Aktuell liefern IBM/HCL neue Funktionalitäten über die von Fixpacks auf Feature Packs umbenannten "FPs" in einem agileren Produktzyklus aus.
In diesem Vortrag geht es um Hintergründe, neue Features und Erfahrungen mit dem letzten Feature Pack 9 und besonders dem aktuellen Feature Pack 10. Der Fokus liegt auf den technischen Details und Fragestellungen aus der Praxis.
Daniel Nashed wird hier sein Wissen über den Domino-Server teilen, während Christoph Adler über den Notes-Client berichtet.
Are your servers running out of space as more, and more complex data is sent thru or stored in applications on the servers? Are your users keep on sending bit like attachments again and again? Do standard tasks like compact or fixup last for ages or does your backup still runs during working hours? Learn how to benefit from build-in space saving features. Maximize disk space savings provided by Domino Attachment and Object Service (DAOS) and ensure that your environment is properly configured for best performance with this feature. Reduce network bandwidth when replicating databases between servers and increase mail quotas without using more disk space. As of Domino 9.0.1, DBMT is the swiss army knife for administrators. Learn about pre-allocating space to avoid file fragmentation during a copy-style compact. Ensure that a mail application in a clustered environment is always available and mail gets delivered while performing file compaction and other standard tasks
#DNUG45 - Manage Session IBM Notes & Domino - Fix & Feature Packs und Best ...Christoph Adler
Aktuell liefern IBM/HCL neue Funktionalitäten über die von Fixpacks auf Feature Packs umbenannten "FPs" in einem agileren Produktzyklus aus.
In diesem Vortrag geht es um Hintergründe, neue Features und Erfahrungen mit dem letzten Feature Pack 9 und besonders dem aktuellen Feature Pack 10. Der Fokus liegt auf den technischen Details und Fragestellungen aus der Praxis.
Daniel Nashed wird hier sein Wissen über den Domino-Server teilen, während Christoph Adler über den Notes-Client berichtet.
Unternehmenswichtige Daten zuverlässig und leistungsfähig nutzen.
Datenblatt zum neuen FileMaker Server 12 inkludiert die neuen Funktionen, Systemanforderungen sowie zehn Gründe für FileMaker Server 12.
Hier können Sie sich die Präsentationsfolien von Daniel Brockmann, Leiter Produktmanagement, SDL Language Technologies, vom 3. SDL Information & Networking Day
in Zürich ansehen.
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)Novakenstein
My "How to migrate Sametime from native Domino Authentication to LDAP" for fitting in the new Sametime Websphere world Session this year at the Admincamp 2013 in Gelsenkirchen.
Seminarvortrag aus einem Cloud Computing Seminar an der Universität Stuttgart 2011. Beschreibung von Cloud Plattformen, deren Bedeutung und ein kleiner Marktüberblick.
Zurück in die Zukunft - DNUG 2014 - Track 5.2panagenda
Zurück in die Zukunft: IBM/Notes Domino
Infrastrukturen verstehen und optimieren
Wohin womit und warum (nicht)?
- für Techniker *und* Manager!
presentation by Daniel Reimann
AdminCam 2017 IBM Connections TroubleshootingNico Meisenzahl
Sie sind ein IBM Connections Administrator und möchten wissen, wie Sie ihre offenen Probleme und Tickets lösen können? Der Vortrag wird Ihnen das notwendige Wissen vermitteln um Ihnen den Betrieb Ihrer Connections Umgebung zu erleichtern. Für Connections und dessen Backend-Services werden verschiedenste Kenntnisse benötigt. Als Beispiel sind IBM Cloud private, DB2, TDI, SSO oder Integrationen mit Docs, CCM, Cognos und Forms Experience Builder zu nennen. Zudem werde Ich über einige Best Practises berichten, welche ihre tägliche Arbeit erleichtern werden.
Uklug 2011 administrator development synergydominion
The document discusses best practices for collaboration between development and administration teams when developing software projects. It recommends that admins be involved from the early requirements gathering stage. Regular meetings and assigning roles will help create a cohesive project team. Both devs and admins should be involved in architecture, design, testing, deployment, operations and measuring success. Involving admins at all stages helps ensure the software is efficient, performs well and doesn't negatively impact systems.
This document provides an overview and guidance for organizations planning a move to cloud collaboration. It discusses why organizations are moving to the cloud, important factors to consider when planning a cloud implementation such as choosing a vendor, conducting a pilot project, reviewing security, migration, and administration. The document emphasizes preparing by evaluating an organization's current environment and processes, as well as planning for user training and help desk support once the cloud is implemented. Key considerations include data security, compliance with regulations, disaster recovery, and service level agreements.
Unternehmenswichtige Daten zuverlässig und leistungsfähig nutzen.
Datenblatt zum neuen FileMaker Server 12 inkludiert die neuen Funktionen, Systemanforderungen sowie zehn Gründe für FileMaker Server 12.
Hier können Sie sich die Präsentationsfolien von Daniel Brockmann, Leiter Produktmanagement, SDL Language Technologies, vom 3. SDL Information & Networking Day
in Zürich ansehen.
Migrate your Sametime Server to LDAP Authentication (Admincamp 2013)Novakenstein
My "How to migrate Sametime from native Domino Authentication to LDAP" for fitting in the new Sametime Websphere world Session this year at the Admincamp 2013 in Gelsenkirchen.
Seminarvortrag aus einem Cloud Computing Seminar an der Universität Stuttgart 2011. Beschreibung von Cloud Plattformen, deren Bedeutung und ein kleiner Marktüberblick.
Zurück in die Zukunft - DNUG 2014 - Track 5.2panagenda
Zurück in die Zukunft: IBM/Notes Domino
Infrastrukturen verstehen und optimieren
Wohin womit und warum (nicht)?
- für Techniker *und* Manager!
presentation by Daniel Reimann
AdminCam 2017 IBM Connections TroubleshootingNico Meisenzahl
Sie sind ein IBM Connections Administrator und möchten wissen, wie Sie ihre offenen Probleme und Tickets lösen können? Der Vortrag wird Ihnen das notwendige Wissen vermitteln um Ihnen den Betrieb Ihrer Connections Umgebung zu erleichtern. Für Connections und dessen Backend-Services werden verschiedenste Kenntnisse benötigt. Als Beispiel sind IBM Cloud private, DB2, TDI, SSO oder Integrationen mit Docs, CCM, Cognos und Forms Experience Builder zu nennen. Zudem werde Ich über einige Best Practises berichten, welche ihre tägliche Arbeit erleichtern werden.
Uklug 2011 administrator development synergydominion
The document discusses best practices for collaboration between development and administration teams when developing software projects. It recommends that admins be involved from the early requirements gathering stage. Regular meetings and assigning roles will help create a cohesive project team. Both devs and admins should be involved in architecture, design, testing, deployment, operations and measuring success. Involving admins at all stages helps ensure the software is efficient, performs well and doesn't negatively impact systems.
This document provides an overview and guidance for organizations planning a move to cloud collaboration. It discusses why organizations are moving to the cloud, important factors to consider when planning a cloud implementation such as choosing a vendor, conducting a pilot project, reviewing security, migration, and administration. The document emphasizes preparing by evaluating an organization's current environment and processes, as well as planning for user training and help desk support once the cloud is implemented. Key considerations include data security, compliance with regulations, disaster recovery, and service level agreements.
The document discusses new features in Quickr Domino 8.5 including a simplified user interface, enhanced document library and discussion forums, improved performance, and an upgraded rich text editor. It covers upgrading to Quickr 8.5, customizing the branding and menus, registering custom widgets, and previewing images and files.
Populating your domino directory or any domino database with tivoli directory...dominion
This document provides instructions for using Tivoli Directory Integrator (TDI) to populate a Domino directory from an external data source. It discusses:
1. TDI allows integrating and synchronizing data between Domino and other data sources like LDAP directories and SQL databases.
2. Examples are provided for migrating data from a CSV file into a Notes database using TDI, and synchronizing data between an Active Directory and Domino directory.
3. The key components of TDI - assemblies, connectors, and attribute mapping - are explained to perform these integration tasks. Detailed configuration steps are outlined for connectors to access Domino, LDAP directories, and other data sources.
The document discusses various tips and features for improving productivity in Lotus Notes, as presented by two experts, the Doctor and the Guru. They cover shortcuts, bookmarks, searching, widgets, and actions. Users are encouraged to customize their Notes interface using these features to work more efficiently.
Extending Lotus Connections with Domino using TDILuis Benitez
The document discusses extending Lotus Connections, an enterprise social networking tool, to integrate with Domino using TDI (Lotus Domino Designer Integration). It provides an overview of key features in Lotus Connections like profiles, communities, blogs, wikis and files. The presentation agenda indicates it will demonstrate how to use TDI to extend Lotus Connections with additional functionality from Domino.
This document provides an overview of using iOS devices in the enterprise. It discusses why IT needs to be engaged with mobile device management as employees increasingly use iOS devices. It covers using IBM Lotus Traveler with iOS, iOS enterprise capabilities including configuration profiles, and over-the-air deployment and mobile device management (MDM) to securely manage iOS devices. The presentation includes demos of an MDM solution to illustrate how devices can be enrolled and managed remotely.
This document provides an overview of JavaScript concepts including:
1. Declaration of variables in JavaScript including simple and typed variable declarations.
2. The different types of variables in JavaScript including strings, numbers, booleans, objects, null, and undefined. Special methods for manipulating string values are also discussed.
3. Operators and expressions in JavaScript including comparison operators, logical operators, and operator precedence. Control flow concepts like if/else statements and loops are also covered.
3. Core JavaScript objects like arrays, functions, errors, and more. Best practices for working with references, scopes, and avoiding common pitfalls are emphasized throughout.
What is a itil and how does it relate to your collaborative environment uklugdominion
ITIL (IT Infrastructure Library) is a framework for managing IT services and ensuring they meet customer expectations. This presentation discusses key ITIL concepts like defining IT services, delivering services, measuring quality of service, and operational management through monitoring, reporting on KPIs and SLAs, problem and change management. Continuous improvement is important to regularly review services and customer requirements. Standard service requests are repeatable with set processes and timelines.
The document discusses challenges in managing Lotus Notes clients, including not knowing how clients are configured, what local data and replicas users have created, and which versions and platforms clients are running. It also covers techniques for managing mail files, such as setting quotas and archiving, and securing Notes data through encryption and private folders.
DNUG 2014 Herbstkonferenz: Moderne Architektur - Hochskalierbare Anwendungsar...JRibbeck
Am praktischen Beispiel wird gezeigt, wie komplexe Anforderungen einer Webanwendung mit Hilfe eines JavaEE-Applikationsservers realisiert und das Frontend über den Domino-Server bereitgestellt werden.
IBM Chat/Sametime Migration (CCTY 2016 Munich)Novakenstein
Presentation (german language) from the IBM "connect comes to you" conference at IBM business partner edcom in munich.
Upgrade best practices to IBM Chat/Sametime 9.0
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...JRibbeck
Am praktischen Beispiel wird gezeigt, wie eine generische Interaktion zwischen der OpenSource Plattform camunda und einem Domino Server erfolgen kann. Im Beispiel werden BPMN 2.0 Workflowmodelle so gestaltet, dass eine beliebige Notes/Domino Datenbank ohne Designänderung mit einem Workflow ergänzt werden kann.
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)André Krämer
Morgens halb zehn in Deutschland: Der Puls Ihrer Anwender ist mittlerweile im dreistelligen Bereich und die ersten User denken ernsthaft darüber nach, den PC aus dem Fenster zu werfen. Ursache: Die von Ihnen entwickelte webbasierte App bremst die Nutzer stets an den entscheidenden Stellen aus. An produktives Arbeiten ist kaum noch zu denken und Überstunden stehen auf dem Tagesprogramm. Doch so weit muss es gar nicht kommen. Glückliche Anwender sind nur wenige Handgriffe entfernt. Und genau diese Handgriffe, wird Ihnen André Krämer in diesem Vortrag zeigen. Gemeinsam werden wir den Ursachen langsamer Web- und Mobile-Apps in den Bereichen JavaScript, CSS und Co. auf den Grund gehen und diese Schritt für Schritt eliminieren.
Dank vieler praktischer Funktionen können Entwickler unter ColdFusion relativ schnell und einfach Applikationen entwickeln und produktiv einsetzen.
Doch wie sieht es aus wenn diese Applikationen dann intensiv genutzt werden? Von hunderttausenden Usern in unzähligen Ländern, Sprachen und Zeitzonen? Wenn Inhalte laufend generiert und abgefragt werden?
Dieser Talk zeigt, wie ColdFusion in einem Enterprise Projekt eingesetzt werden kann. Welche Architektur für einen sicheren Betrieb rund um die Uhr und die Welt benötigt wird. Welche ColdFusion Enterprise-Funktionen gebraucht werden und welche nicht, welche überhaupt funktionieren, welche Lektionen wir im praktischen Einsatz gelernt haben und warum Optimierungen im Milisekunden-Bereich tatsächlich Tage sparen können.
Tipps zur Performanceoptimierung für Liferay PortalStefan Hilpp
Mit Liferay einer Open Source Portallösung werden umfangreiche Enterprise- oder Mitarbeiterportale realisiert. Liferay eignet sich auch für mehrsprachige Internetportale mit geschlossenen Nutzerräumen.
In allen Fällen muss Liferay den Zugriff von mehreren hunderten gleichzeitigen Zugriffen ohne großen Performance Verlust verkraften.
Leicht gesagt und nicht so einfach zu realisieren. Wir sind an das Thema Liferay Performance systematisch heran gegangen. Heraus gekommen sind allgemeine und Liferay spezifischen Regeln, die das Ziel haben eine gute Performance bei hoher Last zu erreichen.
Liferay - ein modernes Portalsystem
Liferay Portal, ein Open Source Portalsystem, eignet sich in Ihrem Unternehmen als mitarbeiter- und prozessorientiertes Enterprise Portal. Es ist eine Portal-Software, die es Ihrem Unternehmen ermöglicht, Informationen, Daten und Anwendungen unter einer einheitlichen Bedienungsoberfläche im Webbrowser zu vereinen, zu personalisieren und dadurch die Geschäftsprozesse Ihres Unternehmens elektronisch zu unterstützen. Die lizenzkostenfreie Open Source Software beeindruckt durch ihre Vielzahl an Funktionen und ihre hervorragende Software-Architektur.
500 Kunden als weltweite Referenzen in verschiedensten Industriebereichen
Schnelle Innovationszyklen
Neue Releases im Abstand von jeweils 8 Monaten
Eine starke Community mit rund 3 Millionen Downloads
250.000 installierten Anwendungen weltweit
Liferay Portal ist das am häufigsten eingesetzte und ausgereifte Open Source Portalframework
Liferay Portal mit mehr als 150 Portlets ist nicht nur die breiteste, sondern auch funktional umfassendste Entwicklung im Open Source Portalumfeld
comundus hat sich seit ihrer Gründung 2001 in Waiblingen bei Stuttgart als Open Source Experte erfolgreich etabliert. Mittelständische Unternehmen und öffentliche Einrichtungen vertrauen auf die langjährigen IT-Erfahrungen des Hauses in der Realisierung ihrer digitalen Arbeitsplätze.
Dabei liegt der Fokus von comundus auf Mitarbeiterportalen und Enterprise Portals. Diese werden für Kunden individuell zusammengestellt. Ergänzend beraten die Experten ihre Kunden auf dem Weg zum Mobile Business und realisieren die Anforderungen vom responsive Design bis zur native App. Internet Portale runden das Leistungsangebot ab.
Produkte wie Liferay Portal, OpenCms, die Enterprise Search Solr und die Web-Shop Plattform KonaKart aus dem Open Source Bereich werden dem Wandel des digitalen Arbeitsplatzes gerecht. Sie helfen unseren Kunden unabhängig von teurer proprietärer Software zu sein.
Never Code Alone: Von Symfony Forms zu einer SPA auf APIsStefan Adolf
Folien mit Einführung und Usecases für eine NCA-Session. Wir beginnen mit einer Symfony Forms-Applikation für eine simple Event-Verwaltung und wandeln sie sukzessive um zu einer React-SPA, die eine Symony-API verwendet.
Hier das Repository dafür: https://github.com/nevercodealone/ncaevent-remote-maerz-react
Ähnlich wie Ajax in domino web-anwendungen - der nächste schritt (20)
The document discusses taking themes in XPages to the next level by going beyond their typical uses. It describes how themes can be used to keep markup clean, enhance performance, maintain device-targeted interfaces, and streamline team development. Themes allow defining common styles, resources, and component properties that can be shared across applications and servers.
The document discusses how the speaker grew from a Lotuscript developer to an XPages expert. It provides an agenda that covers an XPages project timeline, how challenges were eased, and a demo. Key challenges solved in the project included sending document links across databases, dynamic totals, memory management, exporting to Excel, PDF generation, and simple iPad support.
The document discusses P.O.H.M. Services, an Australian non-profit organization that provides various social services. It outlines the services provided, current statistics on those served, and the strategic direction to shift to a more participatory culture. It then describes a project to implement IBM Social Business technology including Lotus Notes, Quickr, and Connections to better connect employees, share knowledge, and enable mobile work across the large, remote organization. The implementation occurred in three phases over two and a half years and provided benefits like improved document sharing, communities for discussions, and a common interface for all employees.
This document provides an overview of a presentation on learning to develop XPages applications for Lotus Notes client developers. The presentation covers tips and transitions for Notes client developers moving to XPages, including separating data from user interface, using data binding, and core and custom controls in XPages. It also discusses server-side JavaScript, scoped variables, CSS and themes, debugging with Firebug, and resources for learning more about JavaScript and Java.
This document provides an overview of installing and using the XPages Extension Library in Domino Designer. It discusses downloading and installing the Extension Library plug-in, verifying the installation, developing applications that utilize Extension Library components, and deploying those applications to the Domino server. Helpful resources for further learning about the Extension Library and XPages development are also listed.
This document discusses how ABB used a Notes application developed by FoCul to implement their risk-based inspection (RBI) process. The application standardized processes, improved efficiency, and helped ABB win over £3 million in new contracts. It provided benefits like improved collaboration, consistency, and flexibility. The application was successful due to individual user benefits, improved organizational efficiency, and enhanced sales opportunities. Lessons learned include the importance of configurability and a modular approach. The application demonstrates how Notes can effectively support knowledge-intensive business processes.
This document provides a summary of a presentation on Lotus software, including Domino and Sametime, running on Linux. The presenter, Bill Malchisky Jr., discusses IBM's long commitment to Linux over the past 20 years, including major investments and contributions to open source projects. He outlines the server-side benefits of running Domino and Sametime on Linux. The document also addresses partitioning, disk and Domino, virtualization support, Linux distributions supported, and tuning tips for optimizing Domino performance on Linux.
This document provides an overview of assessing the security of Lotus Domino applications. It discusses why security testing is necessary given Domino's unique architecture. It then covers Domino commands, conducting blackbox and whitebox testing, default database files, and the Domino architecture. Key areas to focus on include access control lists, design elements, agents that could be called from the web, and preventing exposed or unnecessary elements. Automated tools and working with administrators and developers are recommended.
This lesson describes how to create a new discussion database and documents that will be used as components in a composite application. The procedures involve:
1) Creating a new local Notes database called "MyDiscussion" based on the discussion template.
2) Creating documents in the new "MyDiscussion" database by adding sample discussion topics and replies.
These components will later be enhanced to support inter-component communication and be added to a composite application.
The document provides suggestions for designing Domino applications for maximum performance, including minimizing the number of views and folders, refreshing indexes infrequently, minimizing document creation in busy databases, minimizing or eliminating authentication in busy databases, and using anonymous default access when possible. These suggestions aim to reduce the processing load on the server by decreasing indexing workload, keeping cached data available, and avoiding additional processing from authentication.
This document discusses error handling techniques in various programming languages and frameworks including @Formulas, JavaScript, Java, Lotusscript, and XPages. It provides examples of try/catch blocks to handle exceptions, throwing custom errors, and registering general error handlers. The key approaches discussed are anticipating errors, using defensive programming, throwing and catching custom exceptions, and handling errors at different levels to provide user-friendly messages.
This document summarizes a presentation about using Lotus Domino for web content management. It discusses choosing Domino, supporting multiple languages, securing Domino applications, and exploring an actual content management system built with Domino. Specific topics covered include using Domino for the design, middleware, and data storage layers; its support for multilingual content; tools for translation and designing multilingual sites; and techniques for securing Domino applications including authentication, authorization, and data security.
The document discusses leveraging Domino Extensible Language (DXL) to overcome limitations in how Domino renders rich text to the web. It explores workarounds like altering the stored rich text or fixing the rendering, but proposes exporting rich text as DXL, transforming it to HTML with XSL, and storing the HTML to provide a faithful rendering. Key steps include generating DXL from rich text, parsing it to a DOM, transforming to HTML with XSL, and saving the HTML to display instead of the rich text field.
What does this presentation cover?
• Part 1 – Quick Introduction.
• Part 2 – What we will cover in this presentation.
2
• Part 3 – Show’n’Tell!
• Part 4 – Q&A.
This document provides an overview and disclaimer about Notes and Domino documentation. It discusses that the documentation is provided for reference purposes only without warranty. It also covers copyright information, listing of trademarks, and a table of contents for the documentation.
This document summarizes various methods for securing Domino web applications, including authentication options, ACL settings, securing views, forms, documents and agents, and locking down unauthorized Domino URLs. It discusses five authentication options: anonymous access, basic authentication, session authentication, server-side SSL, and client-side SSL. It also covers setting appropriate ACL privileges, hiding views from web users, using forms and documents access lists, and checking the HTTP_Referer variable to prevent direct agent invocation from browsers.
Binding to multiple datasources on a single xPagedominion
This document provides instructions for creating an XPage application that binds multiple data sources to a single page. It describes creating customer and order forms, views, and XPages to display and edit the data. The Orders XPage binds to both an order document and customer document, using a panel to display the linked customer data. When the order's customer field changes, the page refreshes to update the customer panel. Buttons allow saving changes to both data sources. A view XPage provides navigation between the custom pages.
This document provides a solution for displaying view icons on XPages in Domino applications. It involves:
1) Getting the column numbers where view icons are needed.
2) Using icon images from the Open Image Resource.
3) Creating a custom control or XPage bound to the view, and adding computed logic to return the correct icon URL based on the column value. Universal variables are also set for the server and database paths.
This allows view icons to work similarly to views, but with the icons determined dynamically based on column values rather than being static. Setting up the computed logic and variables correctly is key to the solution.
IBM WebSphere Application Server Introduction for Lotusdominion
This document provides an introduction to IBM WebSphere Application Server and how it relates to several Lotus products. It explains that WebSphere Application Server is an application server platform that provides a robust and scalable environment for running applications like Lotus Connections, Sametime, Quickr services for WebSphere Portal, and WebSphere Portal. The document discusses the benefits of WebSphere Application Server and why some Lotus products are built on this technology to take advantage of its performance, security, scalability and standards compliance.
This document summarizes a presentation about new OpenNTF projects based on XPages and Dojo. It discusses the OpenNTF organization and its goals of enabling collaboration on open source IBM Lotus Notes and Domino applications. Several new discussion template projects are presented that improve the user interface for both web and rich clients using latest technologies. Implementation details of features like navigation, profiles, and notifications are covered. The document concludes with references for getting involved in OpenNTF.
Ajax in domino web-anwendungen - der nächste schritt
1. AJAX in Domino-Web-Anwendungen —
der nächste Schritt
28. Februar 2007
Thomas Bahn
assono GmbH
tbahn@assono.de
http://www.assono.de
+49/4307/900-401
Agenda
• Organisatorisches
• Wie kann man den Domino-Server per AJAX aufrufen?
Agenten
Servlets (intern/extern)
Web Services
ReadViewEntries-URL-Befehl
Ansichten
Dokumente und Masken
Seiten
SaveDocument-URL-Befehl
CreateDocument-URL-Befehl
ReadViewEntries-URL-Befehl mit OutputFormat=JSON
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 2
1
2. Agenda
• Welcher Datenformate gibt es für die Antwort?
„Einfacher“ Text
- einfacher Werte
- Listen
- CSV
- Tabelle mit festen Spaltebreiten
HTML
XML
- DXL
- SOAP
JSON
JavaScript
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 3
Agenda
• Demos
1. Abhängige Auswahllisten nachladen
2. Test auf Eindeutigkeit
3. Fortschrittsanzeige
4. Bearbeitbare Ansichten
5. JavaScript-Fehler auf Server protokollieren
6. Ansicht auf neue Dokumente überwachen
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 4
2
3. Organisatorisches
Aufrufe
Formate
Demos
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 5
Organisatorisches
• Wer bin ich?
• Thomas Bahn, IT-Berater, Dipl.-Math., 36 Jahre, verheiratet
• Mitgründer und -inhaber der assono GmbH
• seit 1997 entwickle ich mit Java und RDBMS, z. B. Oracle (OCP)
• seit 1999 mit IBM Lotus Notes/Domino
(IBM Certified Application Developer - Lotus Notes/Domino R4 - 7)
• Mein Schwerpunkt liegt auf Anwendungen mit Schnittstellen zu
anderen Systemen, z. B. RDBMS, SAP R/3, und interaktiven Web-
Anwendungen
• auch Administrator
(IBM Certified System Administrator – Lotus Notes/Domino 6 - 7)
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 6
3
4. Organisatorisches
• bitte zum Schluss Bewertungsbögen ausfüllen
• Zwischenfragen erwünscht!
• bitte Handys aus- oder stumm schalten
• Der Vortrag ist sehr lang. So ich notfalls länger machen oder Details
überspringen?
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 7
Organisatorisches
• Vorweg noch ein paar Fragen:
Wer hat schon Domino-Web-Anwendungen mit AJAX entwickelt?
Wurde ein Framework benutzt, und wenn ja, welches?
Wird die Anwendung schon produktiv eingesetzt?
Wer hat mit AJAX, aber nicht unter Domino entwickelt?
Wer hat Domino-Web-Anwendungen ohne AJAX entwickelt?
Wer kennt AJAX, aber ohne Praxis (oder nur ausprobiert)?
Wer war letztes Jahr bei meinem Vortrag
- auf dem EntwicklerCamp 2006?
- auf der Herbst-DNUG?
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 8
4
5. Organisatorisches
Aufrufe
Formate
Demos
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 9
Wie kann man den Domino-Server per AJAX aufrufen?
• Agenten
• Servlets
intern (Domino Servlet Engine)
extern (anderer Servlet-Container)
• Web Services
• ReadViewEntries-URL-Befehl
• Ansichten
• Dokumente und Masken
• Seiten
• SaveDocument-URL-Befehl
• CreateDocument-URL-Befehl
• ReadViewEntries-URL-Befehl mit OutputFormat=JSON
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 10
5
6. Agenten
• weit verbreiteter Ansatz, sehr flexibel
• können Daten erzeugen, lesen, ändern und löschen
• können auch auf andere (Nicht-Domino-)Systeme zugreifen,
auf einzelne oder mehrere Dokumente
• können Aufruf-Parameter nutzen
• können mit GET und POST aufgerufen werden
• können beliebige Datenformate zurückgeben
• erfordern LotusScript- oder Java-Kenntnisse
• erfordern Programmierung (Entwicklungskosten)
• erfordern Zugriff auf die Gestaltung der Datenbank
(nicht möglich bei versteckter Gestaltung)
• sind relativ langsam (Server) wegen Overhead (Initialisierung, JVM!)
• Einstellung im Server-Dokument: Web-Agenten parallel ausführen
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 11
Agenten (forts.)
• Beispiel-Aufruf (GET):
var agentURL = ’http://server/db.nsf/AgentName?OpenAgent’;
var parameters = ’Parameter1=Hallo+Welt&Parameter2’;
request.open(’GET’, agentURL+escape(’&’+parameters), true);
• Beispiel-Aufruf (POST):
var agentURL = ’http://server/db.nsf/AgentName?OpenAgent’;
var parameters = ’Parameter1=Hallo+Welt&Parameter2’;
request.open(’POST’, agentURL, true);
...
request.send(parameters);
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 12
6
7. Agenten (forts.)
• Beispiel-Agent:
Sub Initialize
Dim currentTimestamp As NotesDateTime
Set currentTimestamp = New NotesDateTime("")
currentTimestamp.SetNow
Print currentTimestamp.GMTTime
End Sub
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 13
Agenten (forts.)
• Ergebnis:
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;
charset=US-ASCII">
</head>
<body text="#000000">
07.01.2007 04:25:39 PM GMT
</body>
</html>
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 14
7
8. Agenten (forts.)
• Beispiel-Agent mit Content-Type:
Sub Initialize
Dim currentTimestamp As NotesDateTime
Set currentTimestamp = New NotesDateTime("")
currentTimestamp.SetNow
Print "Content-Type: text/plain"
Print
Print currentTimestamp.GMTTime
End Sub
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 15
Agenten (forts.)
• Ergebnis:
24.02.2007 08:21:38 PM GMT(0x0a)
• Print hängt immer Linefeed (ASCII-Code 10) an
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 16
8
9. Servlets
• sehr flexibel
• können Daten erzeugen, lesen, ändern und löschen
• können auch auf andere (Nicht-Domino-)Systeme zugreifen
• können Aufruf-Parameter nutzen
• können mit GET und POST aufgerufen werden
• können beliebige Datenformate zurückgeben
• erfordern Java-Kenntnisse
• können fertige Java-Komponenten und –Bibliotheken nutzen
• erfordern Programmierung (Entwicklungskosten)
• erfordern keinen Zugriff auf die Gestaltung der Datenbank
• sind schneller wegen einmaliger Initialisierung, skalieren besser
• müssen synchron mit Web-Anwendung aktualisiert werden,
keine automatische Verteilung oder Replikation
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 17
Interne Servlets
• So nenne ich Servlets, die in der Domino Servlet Engine laufen
• Egal welche Domino-Version: Die JVM ist immer „veraltet“.
• Domino Servlet Engine muss diese aktiviert sein.
• Jedes Servlet muss in die servlet.properties eingetragen werden.
• Für das Ausliefern sind Schreibrechte auf Dateisystem des Domino-
Servers notwendig (konfiguriertes Servlet-Verzeichnis).
• Der HTTP-Task muss bei jeder Aktualisierung neu gestartet werden.
• Mehr zur Domino-Entwicklung mit Servlets unter:
http://www-128.ibm.com/developerworks/lotus/library/ls-servlets/index.html
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 18
9
11. Externe Servlets
• So nenne ich alle Servlets, die in einem anderen Servlet-Container
laufen, z. B. Apache Tomcat, Apache Geronimo, IBM WebSphere, …
(beliebiger Java Enterprise Edition (JEE) Server)
• Jede Java-Version ist möglich.
• Dadurch sind können auch Komponten und Bibliotheken genutzt
werden, die eine aktuelle JVM voraussetzen.
• Der andere Server muss in der gleichen Domäne laufen
(Sicherheitsbeschränkung von XMLHttpRequest)
• Er muss zusätzlich installiert und gewartet werden (Lizenz- und
Wartungskosten).
• Aktualisierungen von Web-Anwendungen und Servlets müssen
synchron durchgeführt werden und sind daher komplex und
aufwendig zu automatisieren.
• DIIOP-Task muss laufen
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 21
Externe Servlets (forts.)
• Beispiel: ExternalServlet
• Aufruf:
http://server:8080/path/ExternalServlet
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 22
11
13. Web Services
• sehr flexibel, aber komplex
• können Daten erzeugen, lesen, ändern und löschen
• können auch auf andere (Nicht-Domino-)Systeme zugreifen,
zum Beispiel SAP oder .net-Anwendungen
• vorhandene Web Services können genutzt werden, wenn sie in der
gleichen Domäne liegen (Sicherheitsbeschränkung)
• erfordern weiteren Server (außer Domino 7 Web Services)
• Dieser muss zusätzlich installiert und gewartet werden (Lizenz- und
Wartungskosten, außer Domino 7 Web Services).
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 25
Web Services (forts.)
• können Aufruf-Parameter nutzen
• können (eigentlich) nur mit POST aufgerufen werden
• für Aufrufe und Antworten nur Simple Object Access Protocol (SOAP)
möglich
• relativ langsam, da SOAP-Nachrichten erstellt und Antworten
geparst werden müssen
• erfordern Kenntnisse in Java (oder Domino 7 und LotusScript) und
Web Services
• erfordern Programmierung (Entwicklungskosten)
• erfordern keinen Zugriff auf die Gestaltung der Datenbank
• Aktualisierungen von Web-Anwendungen und Web Services müssen
synchron durchgeführt werden und sind daher komplex und
aufwendig zu automatisieren (außer Domino 7 Web Services).
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 26
13
14. ReadViewEntries-URL-Befehl
• weit verbreiteter Ansatz
• eingeführt in Domino 5.0.2 für View-Applet
• sehr schnell und skalierbar, da kein interpretierter Code aufgerufen
wird und Anfragen gecacht werden können
• sicher, da die normalen Zugriffsbeschränkungen angewendet werden
• kann Daten nur lesen
• kann nur Standard-Parameter nutzen: Start, Count, StartKey,
UntilKey, RestrictToCategory usw.
• kann nur mit GET aufgerufen werden
• erfordert keine (serverseitige) Programmierung
• erfordert keinen Zugriff auf die Gestaltung der Datenbank,
wenn es eine Ansicht mit den benötigten Informationen schon gibt
• Rückgaben sind immer in DXL und müssen im Browser geparst
werden (automatisch).
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 27
ReadViewEntries-URL-Befehl (forts.)
• Beispiel
http://server/path/db.nsf/CarModels?ReadViewEntries
• Ergebnis
<?xml version="1.0" encoding="UTF-8"?>
<viewentries toplevelentries="58">
<viewentry position="1" unid="…" noteid="4DF2" siblings="58">
<entrydata columnnumber="0" name="Manufacturer">
<text>Acura</text>
</entrydata>
<entrydata columnnumber="1" name="Models">
<textlist><text>MDX</text><text>NSX</text>…<text>TSX</text></textlist>
</entrydata>
</viewentry>
...
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 28
14
15. ReadViewEntries-URL-Befehl (forts.)
• Navigation mit DOM-Operationen in JavaScript möglich
• Beispiel
var xmlRoot = request.responseXML;
var viewEntriesFirstNode =
xmlRoot.getElementsByTagName('viewentries')[0];
var rowsCount =
viewEntriesFirstNode.getAttribute('toplevelentries');
alert("Number of rows in view: " + rowsCount);
• „Trick“: Count=0: Minimale Datentransfer und die Anzahl
(toplevelentries ) ist enthalten
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 29
Ansichten
• Ansichten, auch solche mit $$ViewTemplate-Maske, können mit
OpenView-URL-Befehlen gelesen werden; eingebettete Ansichten
mit OpenPage, OpenForm oder ReadForm.
• sehr schnell, skalierbar, Caching möglich
• können Daten nur lesen
• können nur mit GET aufgerufen werden
• Ansichten können nur Standard-Parameter nutzen: Start, Count,
StartKey, UntilKey, RestrictToCategory usw.;
eingebettete Ansichten/Ansichten mit $$ViewTemplate-Maske
können auch weitere Parameter nutzen (werden in der Maske bzw.
Seite verwendet)
• flexibler als ReadViewEntries-URL-Befehl:
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 30
15
16. Ansichten (forts.)
• Rückgabe normalerweise HTML-Seite (mit <table>, <tr> usw.);
um nicht parsen zu müssen, „Ansichtsinhalt als HTML behandeln“
aktivieren und in Masken mit Durchgangs-HTML benutzen
• bei Ansichten jedes Format ohne Kopf- und Fußzeilen möglich, bei
eingebetten Ansichten/mit $$ViewTemplate-Maske fast jedes Format
• dadurch sehr kleine Antworten = geringe Netzlast möglich
• erfordern keine serverseitige Programmierung (wohl aber
entsprechende Gestaltungselemente)
• erfordern Zugriff auf die Gestaltung der Datenbank
(nicht möglich bei versteckter Gestaltung)
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 31
Ansichten (forts.)
• Achtung:
Die Anzahl der Zeilen, die im Web für eine Ansicht zurückgegeben
werden, wird ohne Count-Parameter bestimmt durch die Einstellung
„Default lines per view page” (Vorgabe 30), und ist nach oben
begrenzt durch „Maximum lines per view page” (Vorgabe: 1.000;
Server-Dokument – Internet Protocols – Domino Web Engine –
Conversion/Display)
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 32
16
17. Ansichten (forts.)
• Beispiel ViewDemoPage.js/ViewDemoView
• Aufruf
http://server/pfad/db.nsf/ViewDemoPage.js?OpenPage&Count=500
• Gestaltung der Seite ViewDemoPage.js:
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 33
Ansichten (forts.)
• Das Ergebnis kann einfach „ausgeführt“ werden:
eval(request.responseText);
var bmws = markenModelsArray["BMW"];
alert(bmws.join(","));
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 34
17
18. Dokumente und Masken
• Dokumente werden mit OpenDocument-URL-Befehlen geöffnet,
Masken mit OpenForm und ReadForm.
• sehr schnell, Caching möglich
• können Daten nur lesen
• können Aufruf-Parameter nutzen
• können nur mit GET aufgerufen werden
• Rückgabe normalerweise HTML-Seite; um nicht parsen zu müssen,
Durchgangs-HTML benutzen; so aber jedes Format möglich
• erfordern keine serverseitige Programmierung (wohl aber
entsprechende Gestaltungselemente)
• erfordern Zugriff auf die Gestaltung der Datenbank
(nicht möglich bei versteckter Gestaltung)
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 35
Dokumente und Masken (forts.)
• Verschiedenste Aufrufvarianten:
http://server/path/db.nsf/maskenname?OpenForm
http://server/path/db.nsf/maskenname?ReadForm
http://server/path/db.nsf/ansichtenname/schlüssel?OpenDocument
http://server/path/db.nsf/0/UNID?OpenDocument
und viele weitere
• Beispiel (FormDemoView) und FormDemo-Maske
• Aufruf
http://server/path/db.nsf/FormDemoView/Weekdays
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 36
18
19. Dokumente und Masken (forts.)
• Maske
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 37
Dokumente und Masken (forts.)
• Ergebnis
<select>
<option>Sunday</option>
<option>Monday</option>
<option>Tuesday</option>
<option>Wednesday</option>
<option>Thursday</option>
<option>Friday</option>
<option>Saturday</option>
</select>
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 38
19
20. Dokumente und Masken (forts.)
• kann genutzt werden, um zum Beispiel <span> zu füllen
• Eine HTML-Seite enthalte
<span id="aSelect"></span>
• dann kann man den „Inhalt“ mit dem innerHTML-Attribut ersetzen
var spanElement = $('aSelect');
spanElement.innerHtml = request.responseText;
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 39
Seiten
• Seiten werden mit OpenPage-URL-Befehlen geöffnet.
• sehr schnell
• können Daten nur lesen
• können Aufruf-Parameter nutzen (@UrlQueryString)
• können nur mit GET aufgerufen werden
• Dynamik über Berechneten Text, also nur Formelsprache möglich
• können beliebige Datenformate zurückgeben
• erfordern keine serverseitige Programmierung (wohl aber
entsprechende Gestaltungselemente)
• erfordern Zugriff auf die Gestaltung der Datenbank
(nicht möglich bei versteckter Gestaltung)
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 40
20
21. Seiten (forts.)
• Beispiel PageDemoPage
• Berechneter Text:
@Text(@Elements(@DbColumn("Notes" : "NoCache"; "";
"JSErrorLogs"; 1)))
• Aufruf
http://server/pfad/db.nsf/PageDemoPage?OpenPage
• gibt aktuelle Anzahl von JSErrorLog-Dokumenten als String zurück
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 41
SaveDocument-URL-Befehl
• Huch, was ist denn das? ☺
• SaveDocument-URL-Befehle werden vom Domino-Web-Server selbst
genutzt, um vorhandene Dokumente zu ändern, die mit einer
EditDocument-URL im Browser geöffnet wurden, z. B. von einer
Aktion mit @Command([EditDocument]).
• Ist die Datenbank-Option „JavaScript beim Erstellen von Seiten
verwenden“ ausgeschaltet, steht im action-Attribut des form-Tags
eine SaveDocument-URL.
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 42
21
22. SaveDocument-URL-Befehl (forts.)
• Beispiel
<form method="post"
action="/db.nsf/68b8d2c1b1decde7c125711500442475/
86c96937a3c280a6c1257115004447f5?SaveDocument"
name="_CarModels">
• Die erste lange Zeichenkette ist die UNID einer Ansicht, die zweite
die UNID eines Dokuments.
• Wie üblich funktionieren aber auch die „0-Ansicht“, Name, NoteID,
Suchschlüssel usw.
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 43
SaveDocument-URL-Befehl (forts.)
• sehr schnell
• nur vorhandene Dokumente können geändert werden
• kann Aufruf-Parameter nutzen
• kann nur mit POST aufgerufen werden
• neue und geänderte Items des Dokuments als Name=Wert-Paare,
getrennt mit & im Körper des POST-Requests
• Kein escape() für die Parameter verwenden!
• erfordert keine serverseitige Programmierung
• erfordert keinen Zugriff auf die Gestaltung der Datenbank, wenn
geeignete Maske vorliegt
• nutzt Web-Agenten, berechnete Felder, Validierungen usw.
• Rückgabe vorgegebenes, sprachabhängiges HTML, wenn es kein
$$Return-Feld gibt
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 44
22
23. SaveDocument-URL-Befehl (forts.)
• Aufruf
http://server/path/db.nsf/Ansichtsname/NoteID?SaveDocument
http://server/path/db.nsf/0/UNID?SaveDocument
• Reihenfolge
Dokument wird lokalisiert und die Items geändert
WebQueryOpen-Agent
Maske wird neu berechnet:
- berechnete Felder
- Eingabeumsetzungen
- Eingabevalidierungen(!)
WebQuerySave-Agent
Dokument wird gespeichert
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 45
SaveDocument-URL-Befehl (forts.)
• Beispiel SaveDocumentDemo-Maske
• OldID: Dialogliste vorhandener IDs
• NewID: Textfeld für neue ID
• Save: Ändert ID im gewählten Customer-Dokument
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 46
23
24. SaveDocument-URL-Befehl (forts.)
var oldIDSelect = $('OldID');
var oldID = oldIDSelect[oldIDSelect.selectedIndex].value;
var newID = $('NewID').value;
var url = '/' + $('WebDBName_').value + '/CustomersByID/' +
OldID + '?SaveDocument';
var postArguments = 'ID=' + newID;
callServer('POST', url, true, 5000, idChanged, undefined,
undefined, 'application/x-www-form-urlencoded', undefined,
postArguments);
function idChanged(request) {…}
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 47
CreateDocument-URL-Befehl
• CreateDocument-URL-Befehle werden vom Domino-Web-Server
selbst genutzt, um neue Dokumente zu erstellen.
• Ist die Datenbank-Option „JavaScript beim Erstellen von Seiten
verwenden“ ausgeschaltet, steht in Seiten, die mit einer OpenForm-
URL geöffnet wurden (also z.B. nach @Command([Compose],…) in
Web-Anwendungen), im action-Attribut des form-Tags eine
CreateDocument-URL
• Beispiel
<form method="post"
action="/db.nsf/b679ef8824d78f39c12571150043d487?CreateDocument"
name="_CarModels">
• Die lange Zeichenkette ist die UNID der Maske.
• Der Maskenname funktioniert aber auch.
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 48
24
25. CreateDocument-URL-Befehl (forts.)
• sehr schnell
• kann nur Dokumente erstellen
• kann Aufruf-Parameter nutzen
• kann nur mit POST aufgerufen werden
• neue Items des Dokuments als Name=Wert-Paare, getrennt mit &
im Körper des POST-Requests
• Kein escape() für die Parameter verwenden!
• erfordert keine serverseitige Programmierung
• erfordert keinen Zugriff auf die Gestaltung der Datenbank, wenn
geeignete Maske vorliegt
• nutzt Web-Agenten, berechnete Felder, Validierungen usw.
• Rückgabe vorgegebenes, sprachabhängiges HTML, wenn es kein
$$Return-Feld gibt
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 49
CreateDocument-URL-Befehl (forts.)
• Aufruf
http://server/path/db.nsf/Maskenname?CreateDocument
• Reihenfolge
Dokument wird erstellt und die Items gesetzt
WebQueryOpen-Agent
Maske wird neu berechnet:
- berechnete Felder
- Eingabeumsetzungen
- Eingabevalidierungen(!)
WebQuerySave-Agent
Dokument wird gespeichert
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 50
25
26. CreateDocument-URL-Befehl (forts.)
• Beispiel CreateDocumentDemo-Maske
• Create: erstellt neues Dokument mit den eingetragenen Werten
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 51
CreateDocument-URL-Befehl (forts.)
var url = '/' + $('WebDBName_').value +
'/JSErrorLog?CreateDocument';
var postArguments = 'Error=' + $('Error').value +
'&Message=' + $('Message').value + '&Location=' +
$('Location').value;
callServer('POST', url, true, 5000, errorLogged, undefined,
undefined, 'application/x-www-form-urlencoded', undefined,
postArguments);
function errorLogged(request) {…}
• Anwendung: Umfragen
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 52
26
27. ReadViewEntries-URL-Befehl mit OutputFormat=JSON
• In der Version 7.0.2 wurde klammheimlich ein neuer Format-
Parameter für die ReadViewEntries-, ReadViewDesign- und
ReadEntries-URL-Befehle eingeführt.
• Wird an eine solche URL der Parameter OutputFormat=JSON
angehängt, wird das Ergebnis nicht in DXL, sondern als JSON
zurückgegeben.
• Vorteil: leichtere Navigation
• Vorteil: schnelleres Parsen
• undokumentiert, Format kann sich in Domino 8 (leicht) ändern
• ansonsten alles wie bei ReadViewEntries gesagt
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 53
ReadViewEntries-URL-Befehl mit OutputFormat=JSON (forts.)
• ReadViewEntries-Beispiel war Liste der CarModels
• Ergebnis mit OutputFormat=JSON:
{"@toplevelentries": 58,
viewentry: [
{"@position": '1',
"@unid": '86C96937A3C280A6C1257115004447F5',
"@noteid": '4EBE',
"@siblings": 58,
entrydata: [
{"@columnnumber": 0, "@name": 'Manufacturer', text: {0: 'Acura'}},
{"@columnnumber": 1, "@name": 'Models',
textlist: {text: [{0: 'MDX'}, {0: 'NSX'},…,{0: 'TSX'}]}}
]},
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 54
27
28. ReadViewEntries-URL-Befehl mit OutputFormat=JSON (forts.)
• Rückgabe nicht wesentlich kürzer als DXL
• einfacher nutzbar durch JavaScript-Interpreter des Browsers
• einfache Navigation durch das Ergebnis
var response = eval('(' + request.responseText + ')');
var rowsCount = response['@toplevelentries'];
alert("Number of rows in view: " + rowsCount);
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 55
Die „richtige“ Technik finden
• Stell dir die folgenden Fragen:
Musst du Daten lesen, erzeugen oder ändern?
Ist die Gestaltung der Datenbank offen, darfst du sie ändern?
Kannst du JavaScript, LotusScript und/oder Java?
Was davon am besten?
Kennst du XML (DXL, SOAP) und/oder JSON?
Wie viele Benutzer werden die Web-Anwendung gleichzeitig
benutzen?
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 56
28
29. Wie kann man den Domino-Server per AJAX aufrufen?
• Agenten
• Servlets
intern (Domino Servlet Engine)
extern (anderer Servlet-Container)
• Web Services
• ReadViewEntries-URL-Befehl
• Ansichten
• Dokumente und Masken
• Seiten
• SaveDocument-URL-Befehl
• CreateDocument-URL-Befehl
• ReadViewEntries-URL-Befehl mit OutputFormat=JSON
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 57
Organisatorisches
Aufrufe
Formate
Demos
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 58
29
30. Welcher Datenformate gibt es für die Antwort?
• „Einfacher“ Text
einfacher Werte
Listen
CSV
Tabelle mit festen Spaltebreiten
• HTML
• XML
DXL
SOAP
• JSON
• JavaScript
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 59
„Einfacher“ Text
• Einfacher Text ist das älteste Datenaustausch-Format
• schnell und effizient zu implementieren
• „Vertrag“ über Format und Inhalt
• Man kann einfache Werte „einfach so“ als String zurückgeben.
• Für Listen von Werten definiert man ein Trennzeichen.
• Für Tabellen entweder Trennzeichen oder feste Spaltenbreiten.
• Bekanntes Format: CSV
• effizient, da kaum Overhead = geringe Netzwerkbelastung
• zerbrechlich, da keine Strukturinformationen
• Empfänger hängt vom Sender ab
• Änderungen müssen synchron implementiert werden
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 60
30
31. HTML
• HTML wird „einfach so“ vom Domino-Web-Server erstellt
• Nutzung als Daten sehr aufwendig, da zu parsen
(insbesondere der „Domino-Dialekt“ von HTML)
• Aber: Nutzung als Teil einer Seite einfach
• Das innerHTML-Attribut eines vorhandenen Elements überschreiben.
• Beispiel: siehe Dokumente und Masken-Abschnitt
• robust, wenn es nicht interpretiert wird, sonst…
• Empfänger hängt vom Sender ab
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 61
XML
• sehr verbreitetes Datenaustausch-Format
• vor allem nützlich, wenn Sender und Empfänger keinen Kontakt
zueinander haben
• zum Beispiel: Sender (Server) ist Standardprogramm (etwa SAP),
Empfänger (Browser) ist eine selbstentwickelte Web-Anwendung
• Die Hauptstärke von XML ist, dass es zusammen mit den Daten auch
eine Strukturbeschreibung enthält.
• Dadurch ist XML relativ robust; neue Elemente und Attribute können
vom Empfänger ignoriert werden, so dass Änderungen am
„Kontrakt“ asynchron (erst Sender, Empfänger irgendwann später)
durchgeführt werden können.
• Die Syntax des „Strukturkontrakts“ kann zum Beispiel mittels XML
Schema, RelaxNG oder Document Type Definition (DTD) beschrieben
und ihre Einhaltung automatisiert geprüft werden.
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 62
31
32. XML (forts.)
• weiterer Vorteil: durch die weite Verbreitung von XML gibt es viele
Werkzeuge und für fast alle Sprachen auch interne Unterstützung
• Beispiel: freie JavaScript-Bibliothek Sarissa unterstützt bei Browser-
unabhängiger XML-Verarbeitung (http://sarissa.sourceforge.net)
• insbesondere das XMLHttpRequest-Objekt unterstützt XML:
Eine Serverantwort in XML wird automatisch geparst und in dem
responseXML-Attribut zur Verfügung gestellt.
• im Browser dann Navigation über DOM-Objekte möglich
• Ein Spezialfall ist SOAP, ein XML-Datenformat, dass für Web
Service-Anfragen und –Antworten genutzt wird
• Ein weiterer Spezialfall ist die Domino XML Language (DXL), die mit
Domino 6 eingeführt wurde und z. B. vom ReadViewEntries-URL-
Befehl erzeugt wird.
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 63
XML (forts.)
• Der Vorteil von XML ist auch sein Nachteil: Durch die
Strukturinformationen werden mehr Daten übertragen, was eine
höhere Netzwerkbelastung bedeutet.
• Neben den dadurch höheren Übertragungszeiten muss das relativ
komplexe Datenformat auf dem Server erzeugt und beim Empfänger
geparst werden, was wiederum die Performance negativ beeinflusst.
• Empfänger hängt vom Sender ab
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 64
32
33. JSON
• JSON = JavaScript Object Notation
• sprachunabhängiger Standart
• von http://json.org:
„JSON (JavaScript Object Notation) is a lightweight data-interchange
format. It is easy for humans to read and write. It is easy for
machines to parse and generate. It is based on a subset of the
JavaScript Programming Language,[…]. JSON is a text format that is
completely language independent but uses conventions that are
familiar to programmers of the C-family of languages, […]. These
properties make JSON an ideal data-interchange language.“
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 65
JSON (forts.)
• JSON ist die Notation von Objekt- und Array-Literalen in JavaScript
• Objekte sind kommaseparierte Listen von Name : Wert-Paaren in
geschweiften Klammern: {}
• Mögliche Werte sind Strings, Zahlen, Objekte, Arrays oder eine der
Konstanten: true, false, null.
• Arrays sind kommaseparierte Listen von Werten in eckigen
Klammern: []
• Namen sind Strings in doppelten Anführungsstrichen: ""
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 66
33
34. JSON (forts.)
• Beispiel:
{ "Name" : "Thomas Bahn",
"Adresse" : {"Ort" : "Raisdorf", "PLZ" : "24223"},
"Telefonnummern" : ["04307/900-401", "0173/9357916"]
}
• Nutzung
var person = eval('(' + request.responseText + ')');
alert(person.Name);
alert(person.Adresse.Ort);
alert(person.Telefonnummern[1]);
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 67
JSON (forts.)
• sehr leichte Navigation durch .-Notation oder Array-Notation
• durch die Strukturinformationen ähnlich robust
• kein automatische Prüfung gegen „Strukturkontrakt“
(entsprechend XML Schema o .ä. bei XML)
• eingebauter „Parser“ in JavaScript: eval()
• dadurch wachsende Popularität im AJAX-Umfeld
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 68
34
35. JavaScript
• statt JSON kann man auch vollständiges JavaScript als
Datenaustausch-Format benutzen
• wie JSON kann JavaScript mit eval() geparst und ausgeführt werden
• Beispiel: siehe Ansichten-Abschnitt
• JavaScript ist „anders“ als die anderen Formate
aktiv
Sender kann vom Empfänger abhängen
sehr flexibel
gefährlich, da Script ungeprüft ausgeführt wird;
vertrauenswürdige Datenquelle wichtig
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 69
Welcher Datenformate gibt es für die Antwort?
• „Einfacher“ Text
einfacher Werte
Listen
CSV
Tabelle mit festen Spaltebreiten
• HTML
• XML
DXL
SOAP
• JSON
• JavaScript
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 70
35
36. Organisatorisches
Aufrufe
Formate
Demos
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 71
Demos
1. Abhängige Auswahllisten nachladen
2. Test auf Eindeutigkeit
3. Fortschrittsanzeige
4. Bearbeitbare Ansichten
5. JavaScript-Fehler auf Server protokollieren
6. Ansicht auf neue Dokumente überwachen
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 72
36
37. Abhängige Auswahllisten nachladen
• Nach Auswahl der Marke die passenden Modelle in zweite
Auswahlliste eintragen
• Zu viele Daten, um alle Modelle für alle Marken im Voraus zu laden
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 73
Abhängige Auswahllisten nachladen (forts.)
• Manufacturer.onchange="getModels();":
var manufacturerSelect = $('Manufacturer');
var currentManufacturer =
manufacturerSelect[manufacturerSelect.selectedIndex].value;
var url = '/' + $('WebDBName_').value +
'/CarModels?ReadViewEntries&count=1&startKey=' +
escape(currentManufacturer);
callServer('GET', url, true, 0,
createCallFunctionWithXMLHandler('setModelSelection'));
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 74
37
38. Abhängige Auswahllisten nachladen (forts.)
• Rückgabe
<?xml version="1.0" encoding="UTF-8"?>
<viewentries toplevelentries="58">
<viewentry position="1" unid="…" noteid="95E" siblings="58">
<entrydata columnnumber="0" name="Manufacturer">
<text>Acura</text>
</entrydata>
<entrydata columnnumber="1" name="Models">
<textlist><text>MDX</text><text>NSX</text><text>RL</text>
<text>RSX</text><text>TL</text><text>TSX</text></textlist>
</entrydata>
</viewentry>
</viewentries>
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 75
Abhängige Auswahllisten nachladen (forts.)
• Aufruf mit ReadViewEntries
Count=1: Rückgabe auf einen Datensatz begrenzen
StartKey={Manufacturer}: genau den Datensatz zum
ausgewählten Hersteller
• Rückgabe: DXL fest, da ReadViewEntries
• Vorhandene Ansicht genutzt
• sparsam: nur einen Datensatz, aber viel Strukturdaten
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 76
38
39. Test auf Eindeutigkeit
• Nach Eingabe der ID ihre Eindeutigkeit überprüfen
• ID.onchange:
var url = '/' + $('WebDBName_').value +
'/CustomersByID?ReadViewEntries&OutputFormat=JSON&' +
'Count=1&StartKey=' + escape($('ID').value);
callServer('GET', url, true, 0, checkIDUniqueness);
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 77
Test auf Eindeutigkeit (forts.)
• Rückgabe
{ "@toplevelentries": 3,
viewentry: [{ "@position": '3',
"@unid": 'BA2ACEE913DB51B6C12572620072596C',
"@noteid": '9E6',
"@siblings": 3,
entrydata: [{ "@columnnumber": 0,
"@name": 'ID',
text: {0: 'tbahn'}
}]
}]
}
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 78
39
40. Test auf Eindeutigkeit (forts.)
function checkIDUniqueness(request) {
var response = eval('(' + request.responseText + ')');
if (response.viewentry) {
if (response.viewentry[0].entrydata[0].text['0'] ==
$('ID').value) {
showIDNotUnique();
} else {
showIDUnique();
}
} else {
showIDUnique();
}
}
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 79
Test auf Eindeutigkeit (forts.)
• Aufruf mit ReadViewEntries
OutputFormat=JSON: Rückgabe als JSON
Count=1: Rückgabe auf einen Datensatz begrenzen
StartKey={ID}: wenn ein Customer mit der ID existiert, wird
dessen Datensatz zurückgegeben, sonst der mit der nächst
größeren ID; gibt es keinen solchen Customer, wird kein
Datensatz zurückgegeben:
{"@toplevelentries": 3}
• Rückgabe: JSON fest, da ReadViewEntries mit OutputFormat=JSON
• leichte Navigation im Ergebnis
• vorhandene Ansicht genutzt
• sparsam: nur einen Datensatz, aber viel Strukturdaten
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 80
40
41. Fortschrittsanzeige
• Den Fortschritt einer lang laufenden Aktion als wachsenden Balken
anzeigen
• Analysieren startet
lang laufenden
Prozess
• window.setInterval
um regelmäßig
Fortschrittsanzeige
zu aktualisieren
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 81
Fortschrittsanzeige (forts.)
function startAnalysis() {
idValue = $('IDSpan').firstChild.nodeValue;
var url = '/' + $('WebDBName_').value +
'/StartAnalysis?OpenAgent&ID=' + escape(idValue);
callServer('GET', url, true, 60000, analysisCompleted,
analysisError, analysisTimedOut);
prepareAnalysis();
currentTimer = window.setTimeout('getProgress();', 500)
}
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 82
41
42. Fortschrittsanzeige (forts.)
• StartAnalysis-Agent:
Erstellt ein CustomerAnalysis-Dokument
In einer Schleife mit Verzögerung wird langsam das Progress-
Item dieses Dokuments erhöht
Ist Progress irgendwann 100, wird ein zufälliges Ergebnis
zurückgegeben
• Ergebnis des StartAnalysis-Agenten z. B.: „good customer“
• Der Agent soll ein langlaufenden Prozess simulieren, dessen
fortschreiten anhand eines Wertes in einem Dokument „beobachtet“
werden kann.
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 83
Fortschrittsanzeige (forts.)
function getProgress() {
idValue = $('IDSpan').firstChild.nodeValue;
var url = '/' + $('WebDBName_').value +
'/GetAnalysisProgress?OpenPage&ID=' + escape(idValue);
callServer('GET', url, true, 1000,
createCallFunctionWithTextHandler('displayProgress'),
undefined, undefined, 'text/plain',
[['Cache-Control', 'no-cache']]);
currentTimer = window.setTimeout('getProgress();', 500);
}
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 84
42
43. Fortschrittsanzeige (forts.)
• GetAnalysisProgress-Seite enthält berechneten Text:
Das Ergebnis eines @DbLookups
• Die Rückgaben sind Zahlen
in Form von Strings
(einfacher Text)
• kein Overhead!
• lohnt sich, da der AJAX-Call
zweimal je Sekunde auf-
gerufen wird
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 85
Bearbeitbare Ansichten
• Daten direkt in der Ansicht bearbeiten
• Nach dem Anklicken Text durch Textfeld ersetzen
• Nach Tab oder Return Änderungen sofort speichern
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 86
43
44. Bearbeitbare Ansichten (forts.)
• jede bearbeitbare Spalte mit Formel entsprechend dieser:
_itemName := "Street";
"<td class="EditableCell" id="" + _itemName + "." +
@Text(@DocumentUniqueID) + "">" + @GetField(_itemName) +
"</td>"
• $$ViewTemplate for Customers.onload = prepareEditableCells();
• erzeugt dynamisch Aufrufe von startEditingCell(), saveEditedCell()
und stopEditingCell() auf allen markierten Spalten
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 87
Bearbeitbare Ansichten (forts.)
function saveEditedCell() {
var cellForDisplay = …;
var cellForEditing = …;
var cellValueAfterEditing = …;
function valueStored(request) {...}
var url = '/' + $('WebDBName_').value + '/0/' +
escape(docUNIDCurrentlyEdited) + '?SaveDocument';
var postArguments = itemNameCurrentlyEdited + '=' +
cellValueAfterEditing;
callServer('POST', url, true, 2000, valueStored,
undefined, undefined, 'application/x-www-form-
urlencoded',undefined, postArguments);
}
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 88
44
45. Bearbeitbare Ansichten (forts.)
• gespeichertes Dokument soll geändert werden
• hier wird SaveDocument-URL-Befehl genutzt
• im Browser sehr einfach zu implementieren
• serverseitig nichts zu tun
• aber $$Return mit sinnvoller Rückgabe wäre hilfreich für
Fehlerprüfung
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 89
JavaScript-Fehler auf Server protokollieren
• Tritt auf der Seite ein JavaScript-Fehler auf, wird er zum
Server gesendet und dort protokolliert
function trapError(message, url, line) {
if (SHOW_ERRORS) {
alert(message);
}
var error = new Error(message);
error.location = url + ', line:' + line;
logJSError(error);
}
window.onerror = trapError;
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 90
45
46. JavaScript-Fehler auf Server protokollieren (forts.)
function logJSError(jsError) {
var url = '/' + $('WebDBName_').value +
'/JSErrorLog?CreateDocument';
var postArguments = 'Error=' + escape(jsError.name)
+ '&Message=' + escape(jsError.message)
+ '&Location=' + escape(jsError.location)
+ '&Referer=' + escape(location.href)
+ …
+ '&Cookie=' + escape(document.cookie);
callServer('POST', url, true, 5000,
createCallFunctionWithTextHandler('errorLogged'),
undefined, undefined, 'application/x-www-form-
urlencoded', undefined, postArguments)
}
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 91
JavaScript-Fehler auf Server protokollieren (forts.)
• neues JSErrorLog-Dokumente soll erstellt werden
• dazu wird CreateDocument-URL-Befehl genutzt
• neue Items werden übergeben, weitere in berechneten Feldern in
der Maske berechnet
• im Browser sehr einfach zu implementieren
• serverseitig nichts zu tun
• aber $$Return mit sinnvoller Rückgabe wäre hilfreich für
Fehlerprüfung
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 92
46
47. Ansicht auf neue Dokumente überwachen
• Es soll eine Ansicht überwacht werden.
• Wenn dort neue Dokumente erscheinen, soll der aktuelle Benutzer
benachrichtigt werden.
• Anfangs wird die Anzahl der Dokumente in der Ansicht ermittelt:
function getViewDocsCount() {
var url = viewURL +
'?ReadViewEntries&Count=0&OutputFormat=JSON';
callServer('GET', url, true, 0, setInitialDocsCount,
undefined, undefined, 'text/plain',
[['Cache-Control', 'no-cache']]);
}
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 93
Ansicht auf neue Dokumente überwachen (forts.)
• Dann werden regelmäßig Anfragen gesendet:
function getNewViewDocs() {
var url = viewURL + '?ReadViewEntries&Start=' +
(viewDocsCount + 1) + '&OutputFormat=JSON&PreFormat';
callServer('GET', url, true, 60000, checkView, undefined,
undefined, 'text/plain', [['Cache-Control', 'no-cache']]);
}
• Trick: Durch Start=(viewDocsCount + 1) werden nur neue
Dokumente zurückgegeben.
Beispiel: Es gab 3 Dokumente, dann werden nur das 4. und alle
weiteren Dokumente zurückgegeben.
• Die Option PreFormat sorgt dafür, dass Zeit-/Datumswerte als
String zurückgegeben werden.
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 94
47
48. Ansicht auf neue Dokumente überwachen (forts.)
• Die folgende Funktion wird für jeden Datensatz in der Rückgabe einzeln
aufgerufen und gibt ein paar Details zur neuen Fehlerprotokoll aus:
function doOnEachNewLogEntry(logEntry) {
var timestamp = getColumnByName(logEntry, 'Timestamp').text['0'];
var error = getColumnByName(logEntry, 'Error').text['0'];
var message = getColumnByName(logEntry, 'Message').text['0'];
var username = getColumnByName(logEntry, '$UserName').text['0'];
alert('New JS log entry on server:nTimestamp:t' + timestamp +
'nError:tt ' + error + 'nMessage:t ' + message +
'nUser name:t' + username);
}
• dabei ist logEntry = response.viewentry[i]
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 95
Ansicht auf neue Dokumente überwachen (forts.)
• und getColumnByName eine kleine Hilfsfunktion, um per Name und
nicht per Index auf den Spaltenwert zuzugreifen:
function getColumnByName(viewEntry, columnName) {
var entryData = viewEntry.entrydata;
for (i = 0; i < entryData.length; ++i) {
var currentEntry = entryData[i];
if (currentEntry['@name'] == columnName) {
return currentEntry;
}
}
return undefined;
}
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 96
48
49. Ansicht auf neue Dokumente überwachen (forts.)
• Um die Ansicht erstmalig und regelmäßig abzufragen, wird wieder
ein ReadViewEntries-URL-Befehl mit OutputFormat=JSON
verwendet.
• Durch den Start=(bisherigeAnzahl + 1)-Trick werden nur dann
Datensätze übertragen, wenn es neue gibt, sonst nur der
Minimalsatz mit der Gesamtanzahl (wie bei Count=0).
• effizienter Aufruf und Datentransport
• keine serverseitige Programmierung notwendig
• leichte Navigation in der Rückgabe
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 97
Demos
1. Abhängige Auswahllisten nachladen
2. Test auf Eindeutigkeit
3. Fortschrittsanzeige
4. Bearbeitbare Ansichten
5. JavaScript-Fehler auf Server protokollieren
6. Ansicht auf neue Dokumente überwachen
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 98
49
50. Noch mehr ins Detail…
• In diesem Vortrag konnte ich viele Themen nur anreißen.
• Mehr ins Details gehen meine beiden Artikel in „The View”
• Ausgabe March/April 2007: „Enhance Web application performance
and flexibility with these 10 AJAX/Domino techniques”
• Ausgabe May/June 2007: „Advanced examples of using AJAX”
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 99
Zum guten Schluss
• Fragen?
jetzt stellen oder später
- E-Mail: tbahn@assono.de
- Telefon: 04307 900-401
• Folien und Beispiele unter
http://www.assono.de/blog.nsf/d6plinks/EntwicklerCamp2007
• In eigener Sache – wir suchen Verstärkung:
IT-Berater (m/w)
Details unter http://www.assono.de/jobs.html
EntwicklerCamp 2007 AJAX in Domino-Web-Anwendungen — der nächste Schritt 100
50