docs: public void addMasterListeners()
      {
          super.addMasterListeners();
          
          this.addListener(new FileListener(null)
          {
              public int doRecordChange(FieldInfo field, int iChangeType, boolean bDisplayOption)
              {
                  int iErrorCode = super.doRecordChange(field, iChangeType, bDisplayOption);
                  if ((iChangeType == DBConstants.AFTER_ADD_TYPE) || (iChangeType == DBConstants.AFTER_UPDATE_TYPE))
                      if (getSharedRecordTypeKey().getValue() == CalendarEntry.APPOINTMENT_ID)
                          if (!getField(CalendarEntry.PROPERTIES).isNull())
                  {   // This will cause the JobScheduler to reschedule the jobs (now that they have changed)
                      MessageManager messageManager = ((Application)getTask().getApplication()).getMessageManager();
                      Map<String,Object> properties = new Hashtable<String,Object>();
                      properties.put(DBParams.PROCESS, JOB_PROCESS_NAME);
                      if (messageManager != null)
                          messageManager.sendMessage(new MapMessage(new BaseMessageHeader(JOB_QUEUE_NAME, MessageConstants.INTRANET_QUEUE, this, null), properties));
                  }
                  return iErrorCode;
              }
          });
      }