Есть задумка сделать так, что бы почта работала по следующему принципу.
1. Если письмо отправляет сотрудник внутри организации , то почта регится от него и в поле заявитель прописывается данный пользователь.
2. Если письмо отправить из вне, то заявитель либо прописывается другой , или какой ни будь левый, а в поле информация прописывался его email.
Смысл в том что бы регистрировать всю почту с сохранением внутренней структуры.
Решение:
Тем самым мы разрешаем регистрацию заявок со всех емеилов. В поле Информация будет указан email обратившегося.
Далее, чтобы автоматически подставлялся Заявитель при поступлении заявки от сотрудника, нужно на базу накатить следующий триггер.
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
CREATE TRIGGER [GetMail]
ON [dbo].[ITSM_SER_INFORMATION]
AFTER INSERT
AS
BEGIN
declare @sMail varchar(1024)
declare @CALLER_ID decimal(18,0)
declare @ORG_ID decimal(18,0)
declare @CALLER_ORG_ID decimal(18,0)
DECLARE @errno int /* Номер ошибки */
IF ( (select ins.SEI_INFORMATION from inserted ins) like '%<%>%'
AND
(select SER_CALLER_PER from inserted ins, dbo.ITSM_SERVICECALLS
where ins.SEI_SER_OID=dbo.ITSM_SERVICECALLS.SER_OID) is Null)
BEGIN
IF EXISTS (SELECT isnull ((SUBSTRING(ins.SEI_INFORMATION, PATINDEX('%<%' , ins.SEI_INFORMATION)+1 , PATINDEX('%>%' , ins.SEI_INFORMATION) - PATINDEX('%<%' , ins.SEI_INFORMATION) -1)), '')
FROM inserted ins)
BEGIN
SELECT @sMail =(SUBSTRING(ins.SEI_INFORMATION, PATINDEX('%<%' , ins.SEI_INFORMATION)+1 , PATINDEX('%>%' , ins.SEI_INFORMATION) - PATINDEX('%<%' , ins.SEI_INFORMATION) -1))
FROM inserted ins
if @sMail <> '' begin
IF @sMail like '%@%%.%'
begin
update dbo.ITSM_SER_CUSTOM_FIELDS
set SCF_SCTEXT11 = @sMail
from inserted ins
where ins.SEI_SER_OID = SCF_SER_OID
select @CALLER_ID= PER_OID from ITSM_PERSONS
where ITSM_PERSONS.PER_EMAIL=@sMail
select @CALLER_ORG_ID=PER_ORG_OID from ITSM_PERSONS
where ITSM_PERSONS.PER_EMAIL=@sMail
update dbo.ITSM_SERVICECALLS
set SER_CALLER_PER=@CALLER_ID
from inserted ins
where ins.SEI_SER_OID=dbo.ITSM_SERVICECALLS.SER_OID
select @ORG_ID=ORG_OID from dbo.ITSM_ORGANIZATIONS
where ITSM_ORGANIZATIONS.ORG_OID=@CALLER_ORG_ID
update dbo.ITSM_SERVICECALLS
set SER_CALLER_ORG=@ORG_ID
from inserted ins
where ins.SEI_SER_OID=dbo.ITSM_SERVICECALLS.SER_OID
end
end
end
END
END