Комментарии можно оставлять "здесь"
Алфавитные ссылки на JavaScript
<script type="text/javascript">
$(document).ready(function () {
var alphabet = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ";
var controls = "";
var URL = window.location.href;
if (URL.indexOf('?') > 0)
URL = URL.substring(0, URL.indexOf('?'));
for (var i = 0; i < alphabet.length; i++) {
controls = controls + '<a href="' + URL + '?letter=' + alphabet.charAt(i) + '">' + alphabet.charAt(i) + '</a> ';
}
document.getElementById('alphabet').innerHTML = '<a href="'+ URL + '">Все</a> ' + controls;
});
</script>
Интерактивная фильтрация
<script type="text/javascript" src="/_layouts/jquery-1.7.1.min.js" ></script>
<script type="text/javascript" language="javascript" >
function init(q) {
if ($("#<%=isLoading.ClientID %>").val() == 0) {
$("#<%=isLoading.ClientID %>").val(1);
$("#waitPic").attr("style", "visibility: visible");
var ctx;
if ('<%# webFullURL %>' != '/') {
ctx = new SP.ClientContext('<%# webFullURL %>');
}
else {
ctx = new SP.ClientContext.get_current();
}
//var site = ctx.get_web().web.get_webs(); // ctx.AuthenticationMode = SP.ClientAuthenticationMode.Default;
var list = ctx.get_web().get_lists().getById('<%# listGUID %>'); // var list = ctx.get_web().get_lists().getByTitle('<%# listTitle %>');
var query = new SP.CamlQuery();
if (q == '')
query.set_viewXml('<View Scope="Recursive"><Query><OrderBy><FieldRef Name="<%# fieldTitle %>"/></OrderBy><Where></Where></Query><RowLimit>15</RowLimit></View>');
else
query.set_viewXml('<View Scope="Recursive"><Query><OrderBy><FieldRef Name="<%# fieldTitle %>"/></OrderBy><Where><Contains><FieldRef Name="<%# fieldTitle %>"/><Value Type="Text">' + q + '</Value></Contains></Where></Query><RowLimit>15</RowLimit></View>');
this.items = list.getItems(query);
ctx.load(items, 'Include(ID, <%# fieldTitle %>)');
ctx.executeQueryAsync(Function.createDelegate(this, this.onOK), Function.createDelegate(this, this.onError));
}
}
function onError(sender, args) {
$("#<%=isLoading.ClientID %>").val(0);
alert('Ошибка: ' + args.get_message());
}
function onOK(sender, args) {
var resultFormat = '<div style=\"float:left;margin:5px;padding:5px;background-color:#FDF5E6;width:330px;"><a target="_self" onclick="window.frameElement.commonModalDialogClose(1, \'{0}~{1}\');"><b>{2}</b></a></div><br/>';
var resultStr = String.format(resultFormat, '0', '', 'Нет значения');
var enumerator = items.getEnumerator();
while (enumerator.moveNext()) {
var listItem = enumerator.get_current();
var title = listItem.get_item('<%# fieldTitle %>').replace('"', '"').replace('\'', '"');
resultStr = resultStr + String.format(resultFormat, listItem.get_item('ID'), title, title);
}
$('#resultSearch').html(resultStr);
$("#<%=isLoading.ClientID %>").val(0);
$("#waitPic").attr("style", "visibility: hidden");
}
$(document).ready(function () {
init('');
});
</script>
<asp:HiddenField ID="isLoading" runat="server" Value="0"/>
<fieldset>
<legend><span style="color:#4B0082">Фильтры</span></legend>
<asp:Label runat="server" ID="lbFilterName" Text="Значение поля содержит"/>
<asp:TextBox runat="server" ID="tbFilterValue" Visible="false"/>
<input type="text" onkeyup="init(this.value);" style="background-image: url(/_layouts/images/spssearch2.gif); BORDER-BOTTOM: blue 1px solid; border-left: blue 1px solid; padding-bottom: 2px; padding-left: 20px; padding-right: 2px; background-repeat: no-repeat; border-top: blue 1px solid; border-right: blue 1px solid; padding-top: 2px;" />
<img src="/_layouts/Images/ajax-loader.gif" alt="Обработка" id="waitPic" name="waitPic" style="visibility:hidden;width:32px;height:32px;"/>
<%-- <asp:Button runat="server" ID="btSearch" OnClick="Search_Click" Text="Найти"/>--%>
</fieldset>
<fieldset>
<legend><span style="color:#4B0082">Результат фильтрации (первые 15 элементов)</span></legend>
<div style="font-family:Times New Roman; font-size:10pt;font-weight:bold;color:Blue;width:100%;">Щёлкните по необходимому элементу</div>
<div style="font-family:Times New Roman; font-size:9pt;width:100%;">
<asp:Panel runat="server" ID="resPanel" />
<div id="resultSearch">
</div>
</fieldset>
2. Данные передаваемые в DataSource (f.Foto - получено с помощью LinqToSQL)
Изображение из БД (Binary)
Пример, взятый из шаблона репитора (Repeator)
1. Разметка
<asp:Image
ID="Image1"
Width="30"
Height="30"
runat="server"
ImageUrl='<%# string.Format("data:image/jpg;base64,{0}",
DataBinder.Eval(Container.DataItem, "Foto")) %>' />
2. Данные передаваемые в DataSource (f.Foto - получено с помощью LinqToSQL)
Foto = Convert.ToBase64String(f.Foto.ToArray())
Использование делегатов
delegate double calc(string x, string y);
calc myCalc = (x, y) => Convert.ToDouble(x) / Convert.ToDouble(y);
myCalc(p1, p2)
Простой слайдер картинок и текста на JQuery
<SharePoint:ScriptLink ID="ScriptLink1" runat="server" Name="/_layouts/ajax/jquery-1.9.1.js" Localizable="false"/>
<SharePoint:ScriptLink ID="ScriptLink2" runat="server" Name="/_layouts/ajax/jquery-ui-1.10.3.js" Localizable="false"/>
<script type="text/javascript">
$(document).ready(function
() {
setInterval(function () {
if($("#autoRotate").is(':checked'))
nextItem();
}, 3000);
});
curItemId = 0;
countItem = 3
function
nextItem() {
curItemId = (++curItemId < countItem ?
curItemId : 0);
prevItemId = (curItemId == 0 ?
countItem-1 : curItemId - 1);
$("#pic"+curItemId).attr("style", "display:
visible");
$("#pic"+prevItemId).attr("style", "display:
none");
}
function
prevItem() {
curItemId = (--curItemId >=0 ?
curItemId : countItem-1);
prevItemId = (curItemId ==
countItem-1 ? 0 : curItemId+1);
$("#pic"+curItemId).attr("style", "display:
visible");
$("#pic"+prevItemId).attr("style", "display:
none");
}
</script>
<div id="picRotator">
<table>
<tr>
<td>
<div id="items">
<div id="pic0" style="display:block;float:left;">
text 1 <br /> <img src="http://basic-slider.com/img/banner03.jpg"
>
</div>
<div id="pic1" style="display:none;float:left;">
text 2 <br /> <img src="http://basic-slider.com/img/banner02.jpg"
>
</div>
<div id="pic2" style="display:none;float:left;">
text 3 <br /> <img src="http://basic-slider.com/img/banner01.jpg"
>
</div>
</div>
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="autoRotate" id="autoRotate" value="" >Слайд шоу<br>
</td>
</tr>
<tr>
<td>
<div id="navigation">
<a style="margin:5px;float:left;" onclick="prevItem()">Предыдущая</a><a style="margin:5px;float:right;" onclick="nextItem()">Следующая</a>
</div>
</td>
</tr>
</table>
</div>
Запрос к БД MS Project Server. Фактические трудозатраты
CREATE FUNCTION [dbo].[GET_TASK_HISTORY] ()
RETURNS @RTS_TASK_HISTORY TABLE (TASK_HISTORY_UID uniqueidentifier, PROJ_UID uniqueidentifier, ASSN_UID uniqueidentifier, TASK_UID uniqueidentifier, RES_UID uniqueidentifier, Act_Work float, Submit_Date datetime)
AS
BEGIN
DECLARE
@TASK_HISTORY_UID uniqueidentifier,
@ASSN_UID uniqueidentifier,
@RES_UID uniqueidentifier,
@TASK_UID uniqueidentifier,
@PROJ_UID uniqueidentifier,
@Assn_Change_Data varbinary(max),
@i int,
@Predel int,
@Delta int,
@Task_Start_Date int,
@Task_Finish_Date int,
@h float
DECLARE ALL_TRANSACTIONS CURSOR FOR
SELECT a.ASSN_UID, a.PROJ_UID, t.TASK_PUBLISHED_UID TASK_UID, r.RES_UID, t.Assn_Change_Data,
datediff(dd, '19831231', ISNULL(asave.Assn_Start_Date,a.Assn_Start_Date)) Assn_Start_Date,
datediff(dd, '19831231', ISNULL(asave.Assn_Finish_Date,a.Assn_Finish_Date)) Assn_Finish_Date
FROM MSP_ASSIGNMENT_TRANSACTIONS t INNER JOIN
MSP_ASSIGNMENTS a ON a.ASSN_UID = t.ASSN_UID LEFT OUTER JOIN
MSP_ASSIGNMENTS_SAVED asave ON asave.ASSN_UID = t.ASSN_UID LEFT OUTER JOIN
MSP_RESOURCES r ON r.RES_UID = a.RES_UID
WHERE ASSN_TRANS_STATE_ENUM = 3
--AND t.PROJ_UID='53181886-A21C-11E0-90F1-003048C568C9'
-- and
-- [TASK_PUBLISHED_UID] in(
-- '1B3CE806-048D-4461-A67A-DA429C898BE6' ,
--'816E01C3-B6A8-11E0-B265-003048C568C9', '5318188A-A21C-11E0-90F1-003048C568C9',
-- 'F85D783E-31DD-454A-ACF9-0DC929CC3131',
-- 'D468F6AA-21E8-4EEC-A782-1A6B84CBFEEF')
ORDER BY 1
OPEN ALL_TRANSACTIONS
FETCH NEXT FROM ALL_TRANSACTIONS
INTO @ASSN_UID, @PROJ_UID, @TASK_UID, @RES_UID, @Assn_Change_Data, @Task_Start_Date, @Task_Finish_Date
WHILE @@FETCH_STATUS = 0
BEGIN
SET @i = 44
SET @Predel = datalength(@Assn_Change_Data) - 4 -- отнимаем 4 байта, т.к. тип длина типа int = 4
/* Разбор двоичных данных */
WHILE @i < @Predel
BEGIN
SET @Delta = cast(substring(@Assn_Change_Data, @i+1, 1) + substring(@Assn_Change_Data, @i ,1) as int)
IF @Delta between @Task_Start_Date and @Task_Finish_Date
BEGIN
SET @h = dbo.fnBinaryFloat2Float(substring(@Assn_Change_Data, @i+17,1) + substring(@Assn_Change_Data, @i+16, 1)
+ substring(@Assn_Change_Data, @i+15,1) + substring(@Assn_Change_Data, @i+14,1)
+ substring(@Assn_Change_Data, @i+13,1) + substring(@Assn_Change_Data, @i+12,1)
+ substring(@Assn_Change_Data, @i+11,1) + substring(@Assn_Change_Data, @i+10,1)) / 60000
SELECT @TASK_HISTORY_UID = new_id from RTS_GetNewID
-- чтобы не попали совсем совсем маленькие числа типа 1,85424246567143E-313
-- @h = 0 нужно, ибо сотрудник мог удалить ранее введенные часы и в этой дате д.б. ноль
IF (@h > 0.0001) OR (@h = 0)
INSERT @RTS_TASK_HISTORY SELECT @TASK_HISTORY_UID, @PROJ_UID, @ASSN_UID, @TASK_UID, @RES_UID, @h, DATEADD(dd,cast(substring(@Assn_Change_Data, @i+1, 1) + substring(@Assn_Change_Data, @i ,1) as int),'19831231')
SET @i = @i+30 /* по идее ускорение */
END
SET @i = @i+1
END
FETCH NEXT FROM ALL_TRANSACTIONS
INTO @ASSN_UID, @PROJ_UID, @TASK_UID, @RES_UID, @Assn_Change_Data, @Task_Start_Date, @Task_Finish_Date
END
CLOSE ALL_TRANSACTIONS;
--DELETE FROM RTS_TASK_HISTORY;
--INSERT INTO RTS_TASK_HISTORY SELECT * FROM @RTS_TASK_HISTORY;
return
End -- Create function SPK_Разбор_единичного_Assn_Change_Data (@Assn_Trans_UID uniqueidentifier)
GO
CREATE FUNCTION [dbo].[fnBinaryFloat2Float] (@BinaryFloat BINARY(8))
RETURNS FLOAT
AS
BEGIN
RETURN SIGN(CAST(@BinaryFloat AS BIGINT))
* (1.0 + (CAST(@BinaryFloat AS BIGINT) & 0x000FFFFFFFFFFFFF) * POWER(CAST(2 AS FLOAT), -52))
* POWER(CAST(2 AS FLOAT), (CAST(@BinaryFloat AS BIGINT) & 0x7ff0000000000000) / 0x0010000000000000 - 1023)
END -- CREATE FUNCTION [dbo].[fnBinaryFloat2Float] (@BinaryFloat BINARY(8))
GO
Комментарии можно оставлять "здесь"
Комментариев нет:
Отправить комментарий