• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    PETVALSharepoint & Foundation :: MOSS & WSS :: Project :: FAST, Search :: ...a cela tahle aplikacni rodinka Sharepoint / Teams / Viva / SPFx / Copilot...a cela tahle aplikacni rodinka
    KERRAY
    KERRAY --- ---
    SharePoint 2013 a VS2013: při vypnutém debugování trvá rekurzivní načítání dat jedné položky a na ni napojených lookupů 400ms

    při zapnutém debugování, po nastavení všech možných doporučení co ještě všechno kvůli pomalému debugu nastavit, trvá načtení té stejné položky 15 vteřin
    KERRAY
    KERRAY --- ---
    KERRAY
    KERRAY --- ---
    a jelikož se ten skript blbě kopíruje a vyžaduje další úpravy, vytáhl jsem z komentářů a poupravil tuhle verzi
    function ribbon_init() {
        var ribbon = (SP.Ribbon.PageManager.get_instance()).get_ribbon();
        alert(SP.Ribbon.PageManager.get_instance());
        createTab(ribbon);
    }
    
    function createTab(ribbon) {
        var tab = new CUI.Tab(ribbon, 'Sample.Tab', 'Sample', 'Tab Description', 'Sample.Tab.Command', false, '', null, null);
        ribbon.addChild(tab); 
        var group = new CUI.Group(ribbon, 'Sample.Tab.Group', 'Sample Actions', 'Group Description', 'Sample.Group.Command', null);
        tab.addChild(group);
        var layout = new CUI.Layout(ribbon, 'Sample.Layout', 'The Layout');
        group.addChild(layout);
        var section = new CUI.Section(ribbon, 'Sample.Section', 2, 'Top'); //2==OneRow
        layout.addChild(section);
        var controlProperties = new CUI.ControlProperties();
        controlProperties.Command = 'Sample.Button.Command';
        controlProperties.Id = 'Sample.ControlProperties';
        controlProperties.TemplateAlias = 'o1';
        controlProperties.ToolTipDescription = 'Use this button';
        controlProperties.Image32by32 = '/_layouts/images/placeholder32x32.png';
        controlProperties.ToolTipTitle = 'A Button';
        controlProperties.LabelText = 'Something';
        var button = new CUI.Controls.Button(ribbon, 'Sample.Button', controlProperties);
        var controlComponent = button.createComponentForDisplayMode('Large');
        var row1 = section.getRow(1);
        row1.addChild(controlComponent);
        group.selectLayout('The Layout');
        SelectRibbonTab('Sample.Tab', true);
    }
    
    SP.SOD.executeOrDelayUntilScriptLoaded(function () {
        var pm = SP.Ribbon.PageManager.get_instance();
        pm.add_ribbonInited(function () {
            ribbon_init();
            /* Register classes and initialize page component */
            SamplePageComponent.registerClass('SamplePageComponent', CUI.Page.PageComponent);
            SamplePageComponent.initializePageComponent();
            //NotifyScriptLoadedAndExecuteWaitingJobs('SamplePageComponent.js');
        });
    }, "sp.ribbon.js");
    
    try
    {
        /* Initialize the page component members */
        SamplePageComponent = function () {
            SamplePageComponent.initializeBase(this);
        }
        SamplePageComponent.initializePageComponent = function () {
            var ribbonPageManager = SP.Ribbon.PageManager.get_instance();
            if (null !== ribbonPageManager) {
                var rbnInstance = SamplePageComponent.get_instance();
                ribbonPageManager.addPageComponent(rbnInstance);
            }
        }
        SamplePageComponent.get_instance = function () {
            if (SamplePageComponent.instance == null) {
                SamplePageComponent.instance = new SamplePageComponent();
            }
            return SamplePageComponent.instance;
        }
        SamplePageComponent.prototype = {
            /* Create an array of handled commands with handler methods */
            init: function () {
                var buttonEnabled = false;
                this._handledCommands = new Object();
                this._handledCommands['Sample.Tab.Command'] = { enable: function () { return true; }, handle: function (commandId, props, seq) { /* do action */ } };
                this._handledCommands['Sample.Group.Command'] = { enable: function () { return true; }, handle: function (commandId, props, seq) { /* do action */ } };
                this._handledCommands['Sample.Button.Command'] = { enable: function () { return true; }, handle: function (commandId, props, seq) { /* do action */ } };
                this._commands = ['Sample.Tab.Command', 'Sample.Group.Command', 'Sample.Button.Command'];
                $('#buttonEnable').click(function () {
                    buttonEnabled = !buttonEnabled;
                    var ribbon = SP.Ribbon.PageManager.get_instance().get_ribbon();
                    ribbon.setFocusOnRibbon();
                    ribbon.pollForStateAndUpdate();
                    SelectRibbonTab('Sample.Tab', true);
                });
            },
            getFocusedCommands: function () { return []; },
            getGlobalCommands: function () { return this._commands; },
            canHandleCommand: function (commandId) {
                var handlerFn = this._handledCommands[commandId].enable;
                if (typeof (handlerFn) == 'function') {
                    return handlerFn();
                }
                return true;
            },
            handleCommand: function (commandId, properties, sequence) {
                return this._handledCommands[commandId].handle(commandId, properties, sequence);
            },
            isFocusable: function () { return false; },
            yieldFocus: function () { return false; },
            receiveFocus: function () { return true; },
            handleGroup: function () { }
        }
    }
    catch(error)
    {
        alert(error);
    }
    
    KERRAY
    KERRAY --- ---
    Úpravy ribbonu přes JavaScript, hurá, a prý s úpravama i v 2010 - fakt nechápu, proč to nemají zdokumentovaný a přístupný celý ty roky

    Creating SharePoint ribbon elements in JavaScript at UMT CG Software Blog
    http://www.ro.umt.com/blog/2013/11/14/creating-sharepoint-ribbon-elements-in-javascript/
    PETVAL
    PETVAL --- ---
    PETVAL
    PETVAL --- ---
    tak uz to mam
    PETVAL
    PETVAL --- ---
    u hashtable jsem neprisel na to, kde vzit ten vstupni objekt
    Hashtable extendedProperties = SPWorkflowTask.GetExtendedPropertiesAsHashtable(SPListiItem Task);
    v afterproperties je TaskID, tak asi tudy

    a z jineho soudku, jak u polozky v seznamu, nad kteryma je to workflow, schovat defaultni schvalit / odmitnout, aby to uzivatele nematlo, pac maji jen ty ukoly?
    KERRAY
    KERRAY --- ---
    PETVAL: podle toho co tu mám by to takhle mělo fungovat - podívat se v tu chvíli v debuggeru na obsah onTaskSchvalitChanged_AfterProperties1.ExtendedProperties bys nemohl? případně si to převést na tu hashtable a podívat se, co bude uvnitř?
    PETVAL
    PETVAL --- ---
    KERRAY: v invoked metode toho onTaskChanged mam

    Guid custFieldID = workflowProperties.TaskList.Fields["StavZadanky"].Id;
    StavZadanky = onTaskSchvalitChanged_AfterProperties1.ExtendedProperties[custFieldID].ToString();
    KERRAY
    KERRAY --- ---
    PETVAL: jojo, právě že vlastní pole - ještě se skýtá otázka, v jakou chvíli k tomu přistupuješ, já jediný čtení hodnoty vlastního pole z ExtendedProperties mám v OnTaskChanged přes ten guid
    PETVAL
    PETVAL --- ---
    KERRAY: i ty vlastni pole bez problemu?
    KERRAY
    KERRAY --- ---
    PETVAL: co se tak koukám, tak při inicializaci workflow zapisuju pomocí internalname, a v TaskChanged čtu pomocí field ID guidu
    PETVAL
    PETVAL --- ---
    KERRAY: to jsem se vykostil uz vcera, pres internal name nenaslo, na googlu nekdo hlasil, ze mu to slo pres display name, to slo i mi, jenze to byl built-in field :)
    KERRAY
    KERRAY --- ---
    PETVAL: přes ty ExtendedProperties by to mělo jít, ale co tak koukám, jednou se tam přistupuje přes InternalName, a jindy přes Guid, tak se možná podívej v debuggeru
    PETVAL
    PETVAL --- ---
    Netusite, jak z workflow precist hodnotu vlastniho fieldu v ukolu v seznamu ukolu postaveneho na vlastnim content type (zalozenem na CT ukolu workflow)? Vygooglil jsem pouziti ExtendedProperties, ale hlasi mi, ze field neexistuje:
    Guid custFieldID = workflowProperties.TaskList.Fields["StavZadanky"].Id;
    StavZadanky = onTaskSchvalitChanged_AfterProperties1.ExtendedProperties[custFieldID].ToString();


    dalsi moznost je pouziti hashtable, ale nedari se mi prijit na to, ktery objekt tomu presne poslat, resp. jak najit ten konkretni task:
    Hashtable extendedProperties = SPWorkflowTask.GetExtendedPropertiesAsHashtable(SPListiItem Task);
    a mam jen workflowProperties.Item.Tasks

    Diky za kazdou radu, je to moje prvni VS workflow :)
    PETVAL
    PETVAL --- ---
    mam pripravit info ke schuzce, o ktere nevim kdo se zucastni, na pozadavky, o kterych taky skoro nic nevim a nemuzu se doptat :D
    tech 100k nebude v 99% pripadu delat najednou, a zakaznikuv budget zaplati mozna tak infrastrukturu (uz ted ji hostujou), rozhodne ne treba Office365 / SP online.
    KUBIS
    KUBIS --- ---
    PETVAL: vypada to zajimave, na jake architekture to vubec chces provozovat pro takove mnozstvi lidi a na windowsech?
    PETVAL
    PETVAL --- ---
    ARIAEL
    ARIAEL --- ---
    PETVAL: A nebo naopak - kolik das za to kdyz ti to napiseme?:)
    Kliknutím sem můžete změnit nastavení reklam