Программирование с Visio в SharePoint, создать новую встречу Outlook в?Javascript?
Я немного экспериментирую с Visio, и я хочу показать файл Visio в SharePoint, файл Visio показывает макет здания, комнаты собраний и их статус + возможность бронировать их с помощью Outlook.
Комнаты собраний определяются в Outlook как адрес электронной почты, и вы можете отправить письмо в комнату, чтобы забронировать его.
Поскольку комнат много, и вы не можете увидеть их наличие, прежде чем добавить комнату в приглашение на встречу, я хочу создать обзор этого в Visio.
Что у меня есть до сих пор: Программа, написанная на C#, которая работает как служба таймера, которая получает информацию о комнатах и собраниях и записывает ее в базу данных SQL2008R2.
2 таблицы:
Комната: RoomEmail, RoomName, FloorNumber, Capacity, RoomStatus(прямо сейчас)
Собрание: MeetingID, RoomEmail (FK), MeetingTitle, MeetingStatus, MeetingStartTime, MeetingEndTime.
Файл Visio добавляется в SharePoint и работает там, прекрасно обновляется. Номера отображаются как красные, если заняты, зеленые, если свободны, и желтые, если предварительно.
Это очень помогает для статуса прямо сейчас, но я хочу еще 2 функциональности.
- Можно щелкнуть ссылку где-нибудь на диаграмме Visio или в другой веб-части и открыть локальный клиент Outlook с новым собранием и комнатой в поле "тоже"
- Возможность видеть запланированные встречи в выбранной комнате, чтобы увидеть, когда можно забронировать его, прежде чем открывать Outlook.
После того, что я видел, невозможно связать фигуры с другой, кроме одной конкретной строки, когда вы соединяете данные в Visio (именно поэтому я добавил roomStatus в таблицу Room). До сих пор я видел в Javascript возможность создавать логику с помощью фигур Visio.
Я добавил это в веб-часть контента:
<script language="javascript">
var app = Sys.Application;
app.add_load(onApplicationLoad);
// hold an instance of the Visio VWA control
var vwaControl;
var shapeSelectionChangedHandler = null;
function onApplicationLoad()
{
vwaControl= new Vwa.VwaControl("WebPartWPQ4");
vwaControl.addHandler("diagramcomplete", onDiagramComplete);
vwaControl.addHandler("shapeselectionchanged", shapeSelectionChangedHandler);
}
function onDiagramComplete()
{
var vwaPage = vwaControl.getActivePage();
vwaPage.setZoom(35); // force the initial zoom level
}
shapeSelectionChangedHandler = function(source, args)
{
// get the selected shape from the shapes on the page
var vwaPage = vwaControl.getActivePage();
var vwaShapes = vwaPage.getShapes();
var shape = vwaShapes.getItemById(args);
// get the data to display for the selected shape
var data = shape.getShapeData();
var strRoomName = "";
var strFloorNumber = "";
var strCapacity = "";
var strStatus = "";
for (var j = 0; j < data.length; j++)
{
if (data[j].label == "RoomName")
{
strRoomName = data[j].value;
continue;
}
if (data[j].label == "FloorNumber")
{
strFloorNumber = data[j].value;
continue;
}
if (data[j].label == "Capacity")
{
strCapacity = data[j].value;
continue;
}
if (data[j].label == "RoomStatus")
{
strStatus = data[j].value;
continue;
}
}
// get the selected state input and set its value
var inputRoomName = document.getElementById('strRoomName');
inputRoomName.value = strRoomName;
var inputFloorNumber = document.getElementById('strFloorNumber');
inputFloorNumber.value = strFloorNumber;
var inputCapacity = document.getElementById('strCapacity');
inputCapacity.value = strCapacity;
var inputStatus = document.getElementById('strStatus');
inputStatus.value = strStatus;
}
</SCRIPT>
Room Name:<br>
<input id="strRoomName" name="Room Name" style="width: 284px" type="text" />
Floor Number:<br>
<input id="strFloorNumber" name="Floor Number" style="width: 284px" type="text" />
Capacity:<br>
<input id="strCapacity" name="Capacity" style="width: 284px" type="text" />
Status:<br>
<input id="strStatus" name="Status" style="width: 284px" type="text" />
Этот код работает хорошо, когда я щелкаю по комнате, он отображается в веб-части контента. Ссылка: http://msdn.microsoft.com/en-us/library/gg243427.aspx
Итак, я посмотрел на некоторых сайтах, чтобы иметь возможность открыть Outlook из Javascript:
Опс, не могу опубликовать больше ссылок, вот код:
function objappt(Subject, Start, Location, End, RequiredAttendees, Body) {
}
var objOL //As Outlook.Application;
var objAppt //As Outlook.AppointmentItem;
var olAppointmentItem = 1;
var olMeeting = 1;
objOL = new ActiveXObject("Outlook.Application");
objappt = objOL.CreateItem(olAppointmentItem);
// With objappt;
objappt.Subject = "My Test Appointment";
objappt.Start = "11/23/2008 9:00 AM";
objappt.End = "11/23/2008 9:45 AM";
// make it a meeting request;
objappt.MeetingStatus = olMeeting;
objappt.Location = "NSW";
objappt.Body = "Testing";
objappt.RequiredAttendees = "someone@somewhere.dom";
objappt.Display();
// End With;
objAppt = null;
objOL = null
Nr2:
//Open Meeting Request
function ResMtg(cal,start,end){
//alert(cal+' - '+start+' - '+end);
//Inbox = 6
//Calendar = 9
var mailFolder = ns.getDefaultFolder(9);
var mailItem = mailFolder.Items.Add("IPM.Appointment.ConfRmReq");
mailItem.MeetingStatus = 1;
mailItem.Subject = "**Meeting Subject**";
mailItem.Start = start;
mailItem.End = end;
var recipient = mailItem.Recipients.Add(cal);//attendees list
recipient.Resolve;
if(recipient.Resolved){mailItem.Display();}
else{alert('Unable to resolve this calendar: '+cal);}
}
Nr3:
var outlookApp = new ActiveXObject("Outlook.Application");
var nameSpace = outlookApp.getNameSpace("MAPI");
mailFolder = nameSpace.getDefaultFolder(6);
mailItem = mailFolder.Items.add('IPM.Note.FormA');
mailItem.Subject="CUSTOMER SERVICE";
mailItem.To = document.frmM.txtEmail.value;
mailItem.HTMLBody =
Все они из довольно старых примеров.
Я также хочу показать информацию из таблицы собрания, связанной с выбранной комнатой. У меня есть информация о том, в какой комнате, но у меня нет связи с таблицей собраний. И я знаю, что вы не можете безопасно подключиться к базе данных непосредственно в Javascript.
Раньше я не занимался кодированием в Javascript, поэтому здесь немного не хватает.
Кто-нибудь знает, как я мог сделать эти 2 функции? Я очень благодарен за любую помощь!