Laden...
HeinzTomato
myCSharp.de - Member
138
Themen
345
Beiträge
Letzte Aktivität
vor 11 Jahren
Dabei seit
14.04.2005
Alter
51
Beruf
Softwareentwickler
Herkunft
Hamburg
Website
Blog
Erstellt vor 13 Jahren

Ich habe es mittlerweile selbst gelöst: Ich gebe das Image als Base64 aus. Das geht im Firefox und ab IE7.

Erstellt vor 13 Jahren

Hallo allerseits. Konkret geht es hier um SharePoint, ich finde aber, hier ist das Thema besser aufgehoben, als in Office-Technologien.

Ich möchte dynamisch Thumbnails von Bildern erstellen und diese dann im Cache ablegen, damit dies beim nächsten Mal nicht mehr notwendig ist.

Dies mache ich (stark verkürzt) so:

 string presetName = string.Format("{0}{1}", preset, filename);

            if (HttpContext.Current.Cache[presetName] == null)
            {
                System.Drawing.Image resizedImage = ResizeImage(GetImage(bigFileName), preset.Width, preset.Height, preset.AbsoluteValue);
                HttpContext.Current.Cache.Insert(presetName, resizedImage, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromDays(60));
            }

Das geht auch so weit. Allerdings möchte ich am Ende nicht das Image-Objekt per Code in ein Image-Objekt übergeben, sondern ich möchte, da es viele Stellen gibt, die aufs ThumbNail zugreifen eigentlich im Code weiterhin einen einfachen "img src="xxxx" verwenden, wobei dann auf den Cache zugegriffen werden soll.

Gibt es da evtl. einfache naming conventions in Sharepoint, dass dann automatisch der richtige Wert gezogen wird?

Erstellt vor 13 Jahren

Hallo allerseits. Ich habe einige Webparts mit Properties, die Sharepoint sich ja automatisch "merkt", d.h. ich kann sie in der PropertyPane bearbeiten, speichern und beim nächsten PageLoad sind sie auch noch da:

  [ToolboxItemAttribute(false)]
    public class MTContact : Microsoft.SharePoint.WebPartPages.WebPart
    {
        private int _leftContactId;

        public int LeftContactId
        {
            get { return _leftContactId; }
            set { _leftContactId = value; }
        }

Mach ich also ein Reload auf der Seite ist "LeftContactId" noch immer mit meinem Wert gefüllt.

Versuche ich das Gleiche aber mit einer Liste oder Array:


private List<int> _allContacts;
public List<int> AllContacts {
get { return _allContacts; }
set { _allContacts=value; }
}

private int[] _allContactsArray;
public int[] AllContactsArray {
get { return _allContactsArray;}
set { _allContactsArray=value; }
}
}

"vergisst" Sharepoint meine Einstellungen. Ist das eine Sicherheitseinstellung oder muss ich sowas wie Serializable hinzufügen?

Erstellt vor 13 Jahren

Hey. Danke für die Arbeit die Du Dir gemacht hast.

Werde da mal ein bisschen rumdoktorn und austesten. Schonmal ein schönes Wochenende.

Erstellt vor 13 Jahren

Du meinst sowas wie:

DELETE FROM clearing_banktransfer WHERE id_bankTransfer IN 
  (SELECT cb.id_banktransfer FROM clearing_banktransfer cb
					inner join clearing_debitor_invoice cdi on cdi.id = cb.id_clearing
					Inner join clearing_debitor cd on cd.id = cdi.id_clearing_debitor
					WHERE cd.id_clearing=@clearingId
)

?

Profiler ging noch nicht. Der Fehler ist leider nur im Live-System und ich muss warten, bis der Kunde diese Funktion wieder benötigt.

Ich könnte natürlich das ganze mit einem anschließenden Rollback testen, aber im Backend passieren dabei noch viele andere Aktionen (z.B. im filesystem), so dass ich das nicht riskieren will

Erstellt vor 13 Jahren

Danke für Eure Anregungen, werde das mal durchtesten. CURSOR hatte ich sogar mal drin, ihn aber - in der Hoffnung das flotter zu kriegen - durch den Loop ersetzt.

Hat zwar nix gebracht, ist aber auch nicht langsamer geworden

Erstellt vor 13 Jahren

verwendetes Datenbanksystem: MSSQL

Hallo allerseits. Vorab möchte ich schicken, dass ich schon ne ganze Weile mit LinQ to SQL arbeite, Fehler der Art "Du verbindest Dich falsch" etc. wohl eher nicht der Grund sind. Es gibt auch 1000 andere Procedures, die das Problem nicht haben.

Nun aber zum eigentlichen Problem:
Ich habe eine Stored Procedure, die relativ viele interne Selects, eine Schleife und Aggregatfunktionen hat etc. (Das sollte aber eigentlich unerheblich sein für mein Problem) :

ALTER PROCEDURE [dbo].[DeleteBankTransfersFromClearing]
(
	@clearingId int
)
AS BEGIN
	DECLARE @isTrans	bit;
		
	IF @@TRANCOUNT>0	
		SET @isTrans = 1;
	ELSE 
		SET @isTrans = 0;

	BEGIN TRY
		IF @isTrans=0 
		BEGIN TRANSACTION
			--] Ab hier individueller Code:	[--
			
			DECLARE
			@loopReturnCode		int,
			@loopNextRowId		int,
			@loopCurrentRowId	int,
			@loopControl		int,
			@banktransferId		int
			
		
			--init
			SELECT @loopControl = 1
			SELECT @loopNextRowId = MIN(cb.id_banktransfer) FROM clearing_banktransfer cb
					inner join clearing_debitor_invoice cdi on cdi.id = cb.id_clearing
					Inner join clearing_debitor cd on cd.id = cdi.id_clearing_debitor
					WHERE cd.id_clearing=@clearingId
			
			IF ISNULL(@loopNextRowId,0) = 0
			BEGIN
				SELECT 'No data!'
				RETURN ;
			END
			
			-- get first row
			SELECT @loopCurrentRowId = cb.id_banktransfer
					FROM clearing_banktransfer cb
					WHERE cb.id_bankTransfer = @loopNextRowId
			
			-- Löschen hier
			WHILE @loopControl = 1
			BEGIN
				-- hier banktransferobjekte löschen (vorerst auskommentiert)
				DELETE FROM clearing_banktransfer WHERE id_bankTransfer = @loopCurrentRowId
				DELETE FROM bankTransfer WHERE id = @loopCurrentRowId; 
				-- für test select statt löschen
				--SELECT t.id_bankTransfer AS BT_ID, t.id_clearing AS CL_ID
				-- FROM clearing_banktransfer AS t
				-- WHERE t.id_bankTransfer = @loopCurrentRowId
				
				-- reset loop vars
				SELECT @loopNextRowId = NULL
				-- get next row
				SELECT @loopNextRowId = MIN(cb.id_banktransfer)
					FROM clearing_banktransfer cb
					WHERE 
					cb.id_bankTransfer > @loopCurrentRowId
				IF ISNULL(@loopNextRowId,0) = 0
				BEGIN
					BREAK
				END
				-- get next row
				SELECT @loopCurrentRowId = cb.id_banktransfer
					FROM clearing_banktransfer cb
					WHERE cb.id_bankTransfer = @loopNextRowId
				
			END
			RETURN			

			--] Ende individueller Code [--
		IF @isTrans=0 		
		COMMIT TRANSACTION
		return 0

	END TRY
	BEGIN CATCH
		EXECUTE GetErrorInfo;
		IF @isTrans=0
		ROLLBACK TRANSACTION
		RETURN (-1)*ERROR_NUMBER()	-- negative Errorcodes
	END CATCH
END


Diese procedure wird dann über LinQ verknüpft:

 private int DeleteBanktransfersFromClearing(DL.LQImpersonalObjectsDataContext datacontext)
        {
            datacontext = datacontext ?? new DL.LQImpersonalObjectsDataContext();
            int errCode = (int)ErrorCodes.NO_ERROR;

            foreach (DL.DeleteBankTransfersFromClearingResult res in datacontext.DeleteBankTransfersFromClearing(_id))
            {
                if (res.ErrorLine.HasValue && res.ErrorLine.Value > 0)
                {
                    return (int)ErrorCodes.DATABASE_ERROR;
                }
            }

            if (errCode >= (int)ErrorCodes.NO_ERROR)
            {
                return this.CreateLog(null, ActionTypes.DELETE, "Löschen Banktransfers erfolgreich", string.Format("CLEARING {0} ", this._id));
            }

            return errCode;
        }

Führe ich die Procedure direkt auf der Datenbank aus, dauert es <1 sekunde, bis die Ausführung abgeschlossen ist. Rufe ich die gleiche procedure über die Methode auf, kommt nach 30 Sekunden ein Datenbank-Timeout. Natürlich mit den gleichen Parametern.

Dabei ist es auch unerheblich, ob ich im Code eine Transaktion erstelle oder die Prozedur ohne Transaktion aufrufe.

Um ehrlich zu sein: Sollte mir jemand dieses Verhalten beschreiben würde ich ihm kein Wort glauben. Aber meine Kollegen kämpfen da jetzt auch schon Monate mit und haben letztendlich ihre letzte Hoffnung in mich gesetzt, die ich nun an Euch weiterleite 😃

Erstellt vor 13 Jahren

In der Designer - Ansicht hast du die Events, in der Codebehind - Ansicht hast du die Events nicht in der Anzeige.

Nö. Ich habs in beiden schon gesehen, bzw. nicht gesehn

runat="server"

Vieleicht liegt es daran

Eher unwahrscheinlich. Schließlich handelt es sich um SERVER-Events. Das wäre relativ witzlos, wenn das mit runat="server" nicht gehen würde.

Erstellt vor 13 Jahren

Hallo allerseits.

Wenn ich in einer ASPX-Quellcode-Datei arbeite und ein ASP-Element bearbeite habe ich hin und wieder in den Properties auch die Events, andere Male jedoch nicht. Ich bin bisher nicht dahinter gekommen, was verursacht, dass die Events gezeigt werden oder eben auch nicht:

(Markiert ist ein <asp:Button /> - Control, ich verwende VS2010

Woran liegt es, dass mal Events angeboten werden, mal nicht?

Erstellt vor 13 Jahren

Konkret geht es hier um einen SharePoint-Webpart, aber das Problem ist eher ein generelles ASPX-Problem:

Ich möchte ein Control dynamisch einbinden:

  private const string _ascxPath = @"~/_CONTROLTEMPLATES/WAS.WPs.RTContacts/RTContacts/RTContactsUserControl.ascx";

        protected override void CreateChildControls()
        {
            Control control = Page.LoadControl(_ascxPath);
            Controls.Add(control);

            Control anotherControl = new RTContactsUserControl();
        }

Während in der ersten Variante alles toll ist (control) hat die zweite Variante (anotherControl) nicht die untercontrols, die eigentlich an dem Control hängen; anotherControl.Controls.Count=0, während control.Controls.Count>0 ist.

Woran liegts?